2017-02-07 3 views
2

私はMVCプロジェクトで認証/認証を実装しています。私が直面している問題は、rolespositionspermissionsなどのようなログインユーザーには多くの条件があることです。私は最善の方法は、AthorizeAttributeをオーバーライドし、そこにコンストラクタの文字列配列としてデータを渡してすべてのロジックを設定し、それらを検証することだと思ったが、私は100以上の権限と40以上の位置があり、例えば60ポジションなどのあらゆるアクションを書きます。複数の認証条件でASP.MVC 5のオーソライズ属性をオーバーライドする方法?

私はそれらを何らかの形でグループ化できると思っていましたが、すべてのアクションがダイナミックで、グループのトンをuser permissionsuser positionsにするため、それは良いポイントではないことがわかります。誰もが持っていた場合

...私はそこにすべての検証を行うためにベースコントローラを作成するためのいくつかの記事に赤いが、私はASP.NETのアイデンティティを使用していると私は「古い」ファッションの道に行くような `tのあなたの解決策を分かち合うと、私は感謝しています。

EDIT - ここ

public class XAuthorizeAttribute : AuthorizeAttribute 
{ 
    public XAuthorizeAttribute() { } 

    public XAuthorizeAttribute(params string[] roles) 
    { 
     Roles = string.Join(",", roles.Select(x => x)); 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     bool isAuthenticAttribute = 
      (filterContext.ActionDescriptor.IsDefined(typeof(XAuthorizeAttribute), true) || 
      filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(XAuthorizeAttribute), true)) && 
      filterContext.HttpContext.User.Identity.IsAuthenticated; 
     if (!isAuthenticAttribute) return; 
     UrlHelper urlHelper = new UrlHelper(filterContext.RequestContext); 
     if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      IdentityManager.SignInManager.AuthenticationManager.SignOut(
       DefaultAuthenticationTypes.ApplicationCookie, DefaultAuthenticationTypes.ExternalCookie); 
     } 
     filterContext.Result = 
      new RedirectResult(urlHelper.Action("Index", "Home", new {area = ""})); 
     base.HandleUnauthorizedRequest(filterContext); 
    } 
} 

のコード例を追加あなたは、私が唯一のちょうど想像60のロールと権限などを入れ、4つの役割を置く見ることができるように、アクション...

[XAuthorize("Administrator", "articlelists", "HOD Engineering", "HOD Interior"....)] 
public ActionResult Index() 
{ 
    return View("Index"); 
} 

ですこれは私のプロジェクトで私がここにあるような役割しか持っていないのでアイデアを得るためのデモです。

+0

探しているものの実用的な例を追加できますか? – Amy

答えて

1

属性へのロールをハードコーディングするのではなく、データベースの権限設定をチェックするプロセスを開始する、カスタム汎用[XAuthorizeAction]属性を作成する方がよい場合があります。

ステップ1)アクションレベルの権限を知るためにデータベースを構成

ステップ2を呼び出す)許可制御

ステップ3のこのレベルを必要とするコントローラアクションの許可属性を作成します)属性インサイド決定呼び出し元と呼び出し元のコントローラーとアクション

ステップ4.)このコントローラーとアクションのデータベースに照会して、アクション許可を判別します。

手順5.)データベースにユーザーのアクセス許可を照会し、一致するかどうかを確認します

関連する問題