我对我global.asax中配置的所有控制器都具有默认角色
protected override void Configure(HttpConfiguration config)
{
//Note: Client Authentication Filter is just a fancy AuthorizeAttribute
config.Filters.Add(new ClientAuthenticationFilter(APIRoles.MYAPI));
}
这向所有控制器添加了角色要求。我想为特定控制器覆盖该角色
public class MFAController : ApiController
{
[HttpGet]
[Route(AuthAPIRoutes.GET_MFA_DEVICES)]
[Authorize(Roles = "MyCustomRoles")]
public MFAMethodDTO[] GetMultiFactorMethods()
{
return GlobalFactory<IMFASecurityService>.Instance.GetMultiFactorMethods();
}
//...
}
但是,当我这样做时。我收到错误消息,因为缺少我的原始角色APIRoles.MYAPI。是否有默认方法来覆盖控制器的AuthorizationAtrribute,以便它们优先于全局过滤器?
答案 0 :(得分:1)
如果我的理解正确,您可以执行以下操作。这不是您想要的,它需要自定义。
public class MyAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
// ...
// if (HttpContext.Current.User == null || HttpContext.Current.User.Identity == null || !HttpContext.Current.User.Identity.IsAuthenticated)
// throw new Exception("Not logged in");
}
}
[MyAuthorize]
public bool DoSomthing()
{
...
}