我有像这样的自定义AuthorizeAttribute
public class DevMode : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (myConditionToAuthorize)
{
// how to allow [Authorize] ?
}
}
}
问题是它与[Authorize]标签一起使用,如下所示:
[Authorize, DevMode]
public class UserController : ApiController { ... }
我需要在[Authorize] == true
[DevMode]
或者最好将它们放在一个独特的授权类中?但后来我不知道检查授权数据。
答案 0 :(得分:5)
或者最好将它们放在一个独特的授权类中?
哦,是的,那确实会更好。您可以简单地从AuthorizeAttribute
派生并调用基本方法:
public class DevModeAttribute : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext actionContext)
{
var authorize = base.IsAuthorized(actionContext);
if (!authorized)
{
// the user is not authorized, no need to go any further
return false;
}
// now apply your custom authorization logic here and return true or false
...
}
}
然后:
[DevMode]
public class UserController : ApiController { ... }
答案 1 :(得分:0)
我使用此方法使用此方法添加自定义IsAdmin(基于声明)
public class IsAdminAttribute : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext actionContext)
{
IPrincipal principal = actionContext.RequestContext.Principal;
return principal.IsAdmin();
}
}
它回答了我自己的最后一条评论,所以希望它可以帮助其他人请注意.IsAdmin是IPrincipal的一种检查声明的扩展方法。