2016-09-21 5 views
-1

アイデンティティを持ったロールとクレームについての記事を読んでいますが、それでもなお多くの事柄は分かりません。クレームでアイデンティティを使用する際にユーザーのアクセス権がどのように実装されるかを知ることは非常に興味があります。ASP.Net MVC:ロールのようなアクションへのクレーム許可を添付する方法

私たちが役割を使用する場合、私たちは単一または複数の役割名でアクションを装飾します。ユーザーがそのロールを持っている場合、ユーザーはそのアクションにアクセスできます。

[AuthLog(Roles = "Manager")] 
public ActionResult Create() 
{ 
    var Product = new ProductMaster(); 
    return View(Product); 
} 

私たちはアイデンティティおよび特許請求の範囲で作業する場合、そのロールのような各アクションに役割や権限を取り付けるためのいくつかの方法がある必要がありますね。そのようなものがあれば、良い例コードを使ってこれを実装する方法や記事のリンクを提供する方法を共有してください。ありがとう

+1

トークンにクレーム(oAuthなど)を使用すると、トークンには「ロール」というクレームが付きます。サイトがこのトークンを受け取ると、プリンシパルオブジェクトを作成し、ロールクレームのロールに基づいてロールを設定します。そうすれば、標準の 'AuthorizeAttribute'や独自の' AuthLogAttribute'を使い続けることができます –

+0

私はこの分野で知識が不十分です。詳細とガイダンスで話し合っている記事にリダイレクトすることができます。ありがとう –

答えて

0

これはカスタムです。データベースからのアクセス許可をチェックする権限。例えば たとえば、あなたが方法を持っている、あなたは許可アカウント、クライアント、構成 のための3 boolsを持っていて、あなたも2許可つのアクションに追加できるのActionResult

上の行の次の場所よりも、それらに基づいてユーザを制限したいですあなたは、データベースからboolsをチェックライン

[PermissionBasedAuthorize("Client, Account")] 

これ以下の方法であり、以下を追加することができますよりも、アカウントとクライアントの許可によってアクセスされることができます。

public class PermissionBasedAuthorize : AuthorizeAttribute 
{ 
    private List<string> screen { get; set; } 

    public PermissionBasedAuthorize(string ScreenNames) 
    { 
     if (!string.IsNullOrEmpty(ScreenNames)) 
      screen = ScreenNames.Split(',').ToList(); 
    } 

    public override void OnAuthorization(HttpActionContext actionContext) 
    { 
     base.OnAuthorization(actionContext); 
     var UserId = HttpContext.Current.User.Identity.GetUserId(); 
     ApplicationContext db = new ApplicationContext(); 

     var Permissions = db.Permissions.Find(UserId); 

     if (screen == null || screen.Count() == 0) 
     { 
      actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized); 
     } 

     bool IsAllowed = false; 

     foreach (var item in screen) 
      foreach (var property in Permissions.GetType().GetProperties()) 
      { 
       if (property.Name.ToLower().Equals(item.ToLower())) 
       { 
        bool Value = (bool)property.GetValue(Permissions, null); 
        if (Value) 
        { 
         IsAllowed = true; 
        } 
        break; 
       } 
      } 

     if (!IsAllowed) 
     { 
      actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized); 
     } 
    } 
} 
関連する問題