2017-04-07 2 views
0

Customize AuthorizeAttributeでパラメータの使用方法を教えてもらえますか?このようパラメータWeb APIを使用したカスタム認証

[Authorize(Role="Admin,Supervisor")] 

[Authorize(User="Me,You")] 

[Authorize(Action="abc,def")] 

これが今の私のコードで、私はここにパラメータを追加する方法はまだ任意のアイデアを持っていけません。

public class CustomAuthorizeAttribute : AuthorizeAttribute 
    { 
     ApplicationDbContext _context = new ApplicationDbContext(); 

     public override void OnAuthorization(HttpActionContext actionContext) 
     { 

      if (AuthorizeRequest(actionContext)) 
      { 

       return; 

      } 

      HandleUnauthorizedRequest(actionContext); 
     } 

     protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) 
     { 
      if (((System.Web.HttpContext.Current.User).Identity).IsAuthenticated) 
      { 
       actionContext.Response = new HttpResponseMessage() 
       { 
        StatusCode = HttpStatusCode.Unauthorized, 
        Content = new StringContent("You are unauthorized to access this resource") 
       }; 

      } 
      else 
      { 
       base.HandleUnauthorizedRequest(actionContext); 
      } 
     } 

     private bool AuthorizeRequest(HttpActionContext actionContext) 
     { 
      var action = actionContext.ActionDescriptor.ActionName; 

      var controller = actionContext.ControllerContext.ControllerDescriptor.ControllerName; 

      var currentUser = actionContext.RequestContext.Principal.Identity.GetUserId(); 

      var user = _context.Users.Join(_context.UserAccesses, x => x.RoleId, y => y.RoleId, (x, y) => 
      new { Id = x.Id, firstName = x.firstName, lastName = x.lastName, RoleId = x.RoleId, Controller = y.Controller, 
       Action = y.Action }).Where(z => z.Id == currentUser && z.Controller == controller && z.Action == action) 
       .SingleOrDefault(); 

      if (user != null) 
       return true; 
      else 
       return false; 

     } 
    } 

答えて

0

あなたがAuthorizeのデフォルトの実装を拡張してきたように、あなたは[CustomAuthorize(Role="Admin,Supervisor")]を使用する必要があります。これによりロールが設定されます。継承された親AuthorizeAttributeに含まれているので、コード内のRolesプロパティに直接アクセスできます。

public override void OnAuthorization(HttpActionContext actionContext) 
    { 
     var roles = Roles; 
     if (AuthorizeRequest(actionContext)) 
     { 

      return; 

     } 

     HandleUnauthorizedRequest(actionContext); 
    } 
+0

私のcustomauthorizeでパラメータの役割にアクセスするにはどうすればよいですか?私にサンプルをお願いします。私はそれにアクセスするコードはまだありません。 –

+0

@KennethAvecilla「役割」だけでも使えます。直接アクセスできます。それはすでに親クラスで定義されているので – Shahzad

+0

私はそれを取得しません。それをはっきりと説明するか、コードを表示してください。お願いします! –

関連する問題