我创建了一个新的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
答案 0 :(得分:0)
我认为这没有意义,您可以通过向自定义授权属性添加更多属性(例如授权类型)来实现相同的功能,并在根据所需方案装饰类时设置这些属性。