0

私は現在、ユーザーテーブル、役割テーブル、およびユーザーロール関連テーブルがあり、1人のユーザーを複数のロール(Admin、BasicUserなど)に関連付けることができるシステムを持っています。私はこれらの役割に基づいて行動方法を認可することができます。これはIdentityフレームワークのものです。ASP.NET MVCでロール内に特権を設定するにはどうすればよいですか?

権限のサポートを追加して、役割だけでなくアクションメソッドを制限することができます。たとえば、コントローラでは、「書き込み」特権を持つ人だけが正常に実行できるはずのHTTPPostアクションがあるとします。

ロールに権限を割り当てるためにどのような変更が必要ですか? I.E.、 "書き込み"と "読み取り"権限を持つ "管理者"ロールを選択し、 "BasicUser"ロールには "読み取り"権限のみを割り当てます。これにより、管理者は書き込み権限によって許可されているすべてのメソッドにアクセスできますが、BasicUserではアクセスできません。

"Privilege"という名前の別のテーブルと、それらとロールとの間の関連付けテーブル、およびロール内の特権を設定するコードを作成する場合、その特権をどのようにフィルタとして使用できますか?したがって、たとえば、以下のアクションは、ユーザーが「書き込み」特権を持つロールでのみ実行できるようにする必要があります。

[Write] 
public ActionResult Create() 
{ 
    return View(); 
} 

ありがとうございます。

答えて

1

同じようAuthorizeAttribute作品、あなたはそれを継承したカスタム認可属性を作成することができます

public class AuthorizePrivilegeAttribute : AuthorizeAttribute 
{ 
    // Custom property 
    public string Privilege { get; set; } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     // Reusing default authentication. 
     var isAuthorized = base.AuthorizeCore(httpContext); 
     if (!isAuthorized) 
     {     
      return false; 
     } 

     return YourCustomCode.HasPrivilege(this.Privilege))  
    } 
} 

次に、あなたの方法の上にそれを使用する:出発点のため

[AuthorizePrivilege(Privilege = "Write")] 
public ActionResult Create() 
{ 
    return View(); 
} 
+0

感謝を。このテクニックを使用すると、YourCustomCodeクラスにはロールと特権の関連付けがあるかどうかをチェックするコードが含まれますか? I.すべてのデータベースコード? – ITWorker

+0

まさに!あなたが答えに満足すれば、答えとしてマークすることを忘れないでください。 – bsoulier

関連する問題