ユーザーに特定のページ要素を表示することを許可することは、要素が Controller の操作アクションを指していない限り、CRUD またはその他のデータベース操作を許可することとは異なることに注意してください。特定のユーザーに表示する必要がなく、特定のデータベース操作を持たない要素がいくつかあると考えてください。これまでのところ、次のアクセス許可が必要であると結論付けています。
- 閲覧許可
- 指揮権
どちらの部分にもMicrosoft Role Providerを使用できると思います。MSDNのドキュメントによると、それを考慮して:
Authorize 属性を使用すると、承認が事前定義された役割または個々のユーザーに制限されていることを示すことができます。これにより、サイトのページを閲覧できるユーザーを高度に制御できます。
次のステップ/質問では、それを行う方法は?
私たちの目的を達成するには、3つの方法があると思います。
解決策 1:各ユーザーを関連するビューに転送するため、特定のページ要素を持つ個別のビューを作成します。このシナリオでは、別のコントローラー アクションも作成する必要があります。のような各アクションの前に、ユーザー タイプを確認する必要があります[Authorise(Roles="Administrator")]
。静的 (定義済み) の役割とアクセシビリティを強制しました。そして一言で言えば、冗長性と不安定性のため、良い解決策ではありません。
解決策 2:ページを動的に作成する1 つのページ(たとえば、ページの編集)if
内のアクセス制限された要素ごとにいくつかの条件を追加するだけです。これは、特定のユーザーを承認し、関連するページ要素 (ボタンなど) を表示するために使用するようなものです。コントローラー側では、
条件を使用して (生成/追加された新しいロールに基づいて動的機能を追加するためではなく)、データベースに対して有効なトランザクションを制御できます。ただし、いくつかの優れた機能主義者が追加されます (パフォーマンスの最適化など)。一文で 適度な解決策.@if
(User.IsInRole("Admin"))
if
FilterAttribute
FilterAttribute
解決策 3:解決策 2 のように動作します。承認用に独自のカスタム FilterAttribute を作成してコントローラーの問題を修正するだけです。これは、メソッドから継承されAuthorizeAttribute
、メソッドをオーバーライドして、 Operations にのみOnAuthorize
必要なことを行います。
例えば :
public class TableAuthorizeAttribute : AuthorizeAttribute
{
public enum TableAction
{
Read,
Create,
Update,
Delete
}
public TableAction Action { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
//do custom authorizization using Action and getting TableEntryID
//from filterContext.HttpContext.Request.QueryString or
//filterContext.HttpContext.Request.Form
}
}
そして、その使用法は次のようになります:
[TableAuthorize(Action=TableAuthorizeAttribute.TableAction.Update)]
上記の概念に関する完全な例を次に示します。AuthorizeAttribute
アプリケーションに追加された新しいロールを承認するためのダイナミックを作成するための完全な例を次に示します。
解決策 3 を一言で言うと完璧だが複雑な解決策.
FilterAttribute
before Actions を使用することで、アプリケーションを静的/事前定義されたロールに制限していることに注意してください。別のデータ構造を使用したり、データベースにテーブルを生成したりする必要はありません。