如何在自定义AuthorizeAttribute中允许[Authorize]

时间:2013-07-01 12:22:34

标签: c# asp.net-web-api

我有像这样的自定义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]

或者最好将它们放在一个独特的授权类中?但后来我不知道检查授权数据。

2 个答案:

答案 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的一种检查声明的扩展方法。