控制器的替代授权角色

时间:2019-07-10 19:16:42

标签: c# .net asp.net-web-api

我对我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,以便它们优先于全局过滤器?

1 个答案:

答案 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()
{
    ...
}