2016-10-11 9 views
2

コントローラ(またはそのメンバー)へのアクセスをAuthorizeAttribute()で飾ることによって制限できます。ユーザークレームに基づくコントローラへのアクセスの承認

ASPアイデンティティーが出現し、より多くの「クレームベース」の世界に移行するにつれて、私は同等の属性を探したいと思います。次のようなものがあります:

[ClaimAuthorize(Permission="CanCreateCustomer")] 
public ActionResult CreateCustomer() 
{ 
    return View(); 
} 

私はこれがアイデンティティに組み込まれると確信していますが、私の検索はすべて空白です。

それが存在しない場合は、自分自身をロールバックするにはどうすればよいですか?

+0

私は生産でこれを実装する前に、クレーム承認のためのコンセプトの公表証拠を持っています。フィルターをチェックすることができます:https://github.com/trailmax/ClaimsAuthorisation/blob/master/ClaimsAuth/Infrastructure/Identity/ClaimsAuthorisationFilter.csそして残りのレポについては疑問です。 – trailmax

答えて

0

おそらく、このためのドキュメント要求に置く必要がありますが、あなたは、IAuthenticationFilterを実装し、それを登録し、その後のようなものを使用してコントローラを飾ることができます始めるために:それを登録[Authorize(Roles = "CanCreateCustomer")]

public class CustomAuthenticationAttribute : Attribute, System.Web.Http.Filters.IAuthenticationFilter 
{ 
    public bool AllowMultiple 
    { 
     get 
     { 
      return true; 
     } 
    } 

    public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken) 
    { 
      context.Principal = //get principal here, based on your implementation 
    } 

    public async Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken) 
    { 
     await Task.FromResult(0); 
    } 
} 

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Filters.Add(new CustomAuthenticationAttribute()); 
    } 
} 
1

自分でロールする必要があります。それからあなたはあなたが望むようにカスタマイズすることができます。

許可属性を拡張する必要があります。

public class ClientAuthorize : AuthorizeAttribute 
{ 
    public new String Roles { get; set; } 
    public String RequiredRights { get; set; } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     return CustomAuthorizeLogicReturnsBool(Roles, RequiredRights); 
    } 

    protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      //filterContext.Result = new HttpUnauthorizedResult(); 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
     else 
     { 
      filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden); 
     } 
    } 


} 

使用

[ClientAuthorize(Roles = "ClientUser", RequiredRights = "SaveAdmin,KillAdmin")] 
public class AdminController : Controller 
{ 
} 
関連する問題