我可以在控制器方法上有多个自定义Authorize属性吗?

时间:2014-12-14 13:08:57

标签: asp.net asp.net-mvc asp.net-web-api

我创建了一个新的Authorize属性,如下所示:

public class ClaimsAuthorizeAttribute : AuthorizeAttribute
{
    private string claimType;
    private int[] claimAllowedValues;

    public ClaimsAuthorizeAttribute(string type, int[] allowedValues)
    {
        this.claimType = type;
        this.claimAllowedValues = allowedValues;
    }

    protected override bool IsAuthorized(HttpActionContext actionContext)
    {

        ClaimsIdentity claimsIdentity;
        var httpContext = HttpContext.Current;
        if (!(httpContext.User.Identity is ClaimsIdentity))
        {
            return false;
        }

        claimsIdentity = httpContext.User.Identity as ClaimsIdentity;
        var identityClaimValue = claimsIdentity.FindFirst(claimType).Value;

        if (identityClaimValue != null && 
            claimAllowedValues.Any(n => (n == Int32.Parse(identityClaimValue))))
        {
            return base.IsAuthorized(actionContext);
        }
        return false;
    }
}

在这里使用:

[ClaimsAuthorize("Role", new[] { 1, 2, 3 })]

我想创建另一个authorize属性。

是否可以创建另一个,然后让其中两个装饰这样的方法:

 [ClaimsAuthorize("Role", new[] { 1, 2, 3 })]
 [OtherAuthorize("abc", 1)]
 [RoutePrefix("api/Question")]
 public class QuestionController : BaseController

1 个答案:

答案 0 :(得分:0)

我认为这没有意义,您可以通过向自定义授权属性添加更多属性(例如授权类型)来实现相同的功能,并在根据所需方案装饰类时设置这些属性。