控制器级别的默认授权角色,并在方法时覆盖

ear*_*ing 4 c# asp.net-mvc authorization controller asp.net-web-api

我正在尝试设置我的控制器上的方法的默认访问权限,所以我已经添加了[Authorize]我的属性ApiController.

在大多数情况下,除非被[AllowAnonymous]属性覆盖,否则这样可以正常工作.

现在我想在混音中添加另一个级别.对于默认情况下我的授权方法,我希望它们需要特定的角色(例如admin),所以我将控制器级别属性更新为[Authorize(roles="admin")].除了少数例外,我不关心它们是什么角色(只是经过身份验证就足够了).

我认为我可以坚持在控制器级别设置Authorize属性并在单个方法级别覆盖它,但这似乎不会像以前那样工作[AllowAnonymous].

有没有关于如何解决这个问题的建议,而不必记得用默认访问级别装饰每个新方法?有点像[Authorize(roles="*")]?即使我需要一个默认角色,每个用户都是AuthenticatedUsers的一部分,那也没关系.

Bad*_*dri 8

如何创建标记属性?AllowAnonymous是一个这样的标记,BTW.当标记存在时,创建您自己的Authorize属性并清除角色.

[MyAuth(Roles = "admin")]
public class ValuesController : ApiController
{
    [ExemptRoles]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

public class ExemptRolesAttribute : Attribute { }

public class MyAuthAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        if (actionContext.ActionDescriptor.GetCustomAttributes<ExemptRolesAttribute>().Any())
            base.Roles = String.Empty;

        base.OnAuthorization(actionContext);
    }
}
Run Code Online (Sandbox Code Playgroud)