2

これは、Users と UserRoles の基本的なデータベース構造です。

ここに画像の説明を入力

私のクライアントは、ロールを見て、「このロールは x、y、z を実行できます」といういくつかのボックスにチェックを入れたいと考えています。X、Y、および Z は、アプリケーション内のいくつかのアクションです。

これは新しいアイデアではなく、この状況には実証済みのパターンがあると確信しています。Wordpress と同様に、ロール Foo が実行できる機能を選択し、ユーザーはそのロールに属します。

MVC3 固有のソリューションに関する提案はありますか?

4

1 に答える 1

2

組み込みの属性[Authorize]を使用すると、特定のアクションを制限して、特定のロールのみが実行できるようにすることができます。

あなたがしようとしていることについては、「関数 X、Y、Z」を役割として扱い、現在役割として持っているものを「ユーザー グループ」などとして扱うことをお勧めします。したがって、クライアントは、特定の「ロール」に異なる「ユーザー グループ」アクセスを割り当てることができます。

このようにして、組み込みのメンバーシップ/ロール/承認のものを利用できます。独自の MembershipProvider と RoleProvider を実装するだけで済みます。

ロール プロバイダーの実装でstring[] GetRolesForUser(string username)は、データベース ルックアップを実行して、どの「ユーザー グループ」に属しているか、したがってどの「ロール」にアクセスできるかを確認する必要があります。

これを行うと、属性を介してさまざまな機能へのアクセスを簡単に制限し[Authorize]、ログインプロセスを処理するために標準のメンバーシップを使用できます。

クライアントが「ユーザー グループ」と「ロール」ではなく「ロール」と「機能」と呼ぶことに固執する場合、これが実装方法とはまったく異なることをクライアントに伝える必要はありません :)

編集

または、独自の Authorization 属性を作成し、 から派生させるだけで、ユーザーが do do function 'X' を許可されている役割にある場合は true または falseAuthorizeAttributeをオーバーライドして返すことができます。AuthorizeCore( HttpContextBase httpContext)

于 2012-01-19T02:39:50.577 に答える