如何允许[授权]进入自定义AuthorizeAttribute
本文关键字:自定义 AuthorizeAttribute 何允许 授权 | 更新日期: 2023-09-27 18:20:29
我有一个类似的自定义AuthorizeAttribute
public class DevMode : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (myConditionToAuthorize)
{
// how to allow [Authorize] ?
}
}
}
问题是,它与[AAuthorize]标签一起使用,如下所示:
[Authorize, DevMode]
public class UserController : ApiController { ... }
我需要允许[Authorize] == true
进入[DevMode]
或者最好将它们放在一个唯一的authorize类中?但是我不知道如何检查Authorize数据。
或者最好将它们放在一个唯一的authorize类中?
哦,是的,那确实会更好。您可以简单地从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 { ... }
我使用这个方法添加了一个自定义的IsAdmin(基于声明)
public class IsAdminAttribute : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext actionContext)
{
IPrincipal principal = actionContext.RequestContext.Principal;
return principal.IsAdmin();
}
}
它在某种程度上回答了我自己的最后一条评论,所以希望它能帮助其他人。请注意。IsAdmin是IPrincipal上的一个扩展方法,用于检查索赔。