2011-11-13 10 views
1

シンプルなASP.NET MVC 3アプリケーションがあります。アプリケーション用に設計したデータベースがあります(App.Domainアセンブリ内のドメインモデルに相当)。 アプリケーションサービスメンバーシップテーブルを自動生成し、アプリケーションデータベースに追加しました。メンバーシップの作成はうまくいきます。 私はUserId(自動生成されたaspnet_Usersテーブルから)とContentId(アプリケーションの内容を保持するContentテーブルから)で構成された複合PKを持つ 'Permission'テーブルを作成しました。 考えられるのは、ユーザーが自分が作成したコンテンツに対して他のユーザーに権限を割り当てることができるようにすることです。 私の計画は、次のようなコントローラにロジックを配置することです: Collapse |コードのコピーASP.NETメンバーシップをユーザー定義のアクセス許可に使用する方法

Guid currentUser = (Guid)Membership.GetUser().ProviderUserKey; 
int[] accessible = (from p in context.Permissions 
         where p.UserId == currentUser 
         select p.ContentId).toArray(); 

次に、現在のユーザ、このような何かのためのコンテンツを取得する: 折りたたみます|コードのコピー

IEnumerable<content> content = context.Content 
      .Where(x => x.PublicAccess < 3 
      || accessible.Contains(x.ContentId));</content> 

私は何の意味もなされている場合、これはユーザー定義された権限を処理するための通常の方法であれば、誰も私を伝えることができます。 また、linqをint []にキャストしないため、このコードは機能しません。それを助けてくれる?

+0

「ユーザー定義の」アクセス許可とはどういう意味ですか? 「ユーザー定義」とは、通常、ユーザー自身が定義したものであり、通常は管理者が管理する「アクセス許可」という語には意味がありません。 –

+0

私は、ユーザーが他のユーザーのアクセス許可を定義できることを意味します。したがって、どのユーザーもコンテンツ表に入っているコンテンツを作成し、アクセス権を与えたい他のユーザーに権限を発行することができます。 – david004

+0

@ミステリ​​ーマン - ありがとう。コードは現在動作しています。私はあなたの答えを投票するだろうが、私は十分なステータスポイントを持っていない。ごめんなさい。 – david004

答えて

1

通常、権限は役割サブシステムによって処理されます。ユーザーがある場合、ユーザがその役割である場合

if (User.IsInRole("RoleName")) { 
    DoWhateverTheUserIsAllowedToDo(); 
} 

あなたはロールまたはユーザーがコンテンツに付与されているものを見上げて、チェックすることで、動的に割り当てられたコンテンツの権限でこれを組み合わせることができ、または:あなたはこのような何かを特に許可されています。

ロールベースのアクセス許可は、ユーザーを特定のページに割り当てるよりも優れています。ページ数が増えるにつれて、ページにユーザーを割り当てることは悪夢となります。したがって、通常はロールをページに割り当て、ユーザーをロールに割り当てます。

あなたのコードは、多くの異なるコンテンツアイテムを返すように多くの作業を行いたいと思われるようです。通常、アクセスを制御したい項目が分かります。 、あなたはあなたのための最高の作品かを決定していますこれを行うには非常に多くの方法がありますが、

var roles = Roles.GetRolesForUser() 
var content = from p in context.Permissions where p.ContentID == contentID 
         && roles.Any(x => p.Roles.Contains(x)) select p; 

しかし:だからあなたのような何かを行う可能性があります。

私はint []にキャストしないことについて最後のことを理解していません。私は.toArray()がタイプミスであると仮定し、それは.ToArray()でなければなりません。 ContentIDintの場合、.ToArrayint[]を作成する必要があります。

+0

ユーザーが、自分が作成したコンテンツのために他のユーザーに権限を与えることができるようにしたい。ロールを使用すると、コンテンツごとに2つのユニークな役割(読み取り、書き込み)を作成し、ユーザーが作成した役割に他のユーザーを割り当てることができるようになります。これは実現可能ですか? – david004

+0

@ david004 - 確かに可能です。あなたのアプリは各ユーザーのために一連のロールを作成し、各ロールからユーザーを追加したり削除したりすることができます。しかし、私の推測では、ユーザーがすべてのコンテンツにアクセスするのではなく、ページ(またはコンテンツアイテム)ごとにアクセスを指定するようにしたいと考えています。または、ユーザーbが許可の役割を果たしている場合、ユーザーbのすべてのコンテンツを見ることができると言えば十分ですか?きめ細かな制御が必要な場合は、あなたのオーラル・ソリューションはうまくいくようです。これを管理することは悪夢であることを理解してください。 –

+0

ありがとう、はい、私は細かい制御の後です。それは悪夢になる可能性があることに注意してください。 – david004

関連する問題