ASP.NET Web API 2 中与 AuthorizationFilterAttributes 的条件或

Conditional OR with AuthorizationFilterAttributes in ASP.NET Web API 2

我正在编写一个可以被两组用户之一访问的控制器操作;每个组都有自己的 AuthorizationFilterAttribute 实现,其中包含定义如何授权组的自定义逻辑。我希望能够使用条件 OR 来确定至少满足一个属性授权过滤器。

我希望我能做这样的事情:

public class ConfigController : ApiController
    {
        [AdminAuthorize || DealRoomAuthorizeAttribute]
        public IHttpActionResult GetBlah()
        {
            return Ok();
        }
    }

但运气不好!关于如何实现这一点有什么想法吗?

由于授权属性的工作方式,您不能直接执行 OR:如果授权失败,它们 "cut" 管道,因此,如果第一个失败,它将停止管道,另一个成功没有机会被处死

您需要实现自己的授权属性,以便自己创建 OR。它很容易实现,因为您只需重用现有属性的逻辑即可。事实上,您可以继承其中之一,并通过重用现有逻辑来覆盖派生的方法,至少 OnAuthorization

更多详情: