ASP.NET Web API 2 中带有 AuthorizationFilterAttributes 的条件 OR

Posted

技术标签:

【中文标题】ASP.NET Web API 2 中带有 AuthorizationFilterAttributes 的条件 OR【英文标题】:Conditional OR with AuthorizationFilterAttributes in ASP.NET Web API 2 【发布时间】:2015-08-15 11:52:19 【问题描述】:

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

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

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

但没有运气!关于如何实现这一点的任何想法?

【问题讨论】:

通常你为所有成员定义一个类,并使用构造函数参数来区分谁有访问权限。这允许您定义一组允许 OR 逻辑的构造函数参数。 Here is an example 【参考方案1】:

由于授权属性的工作方式,您不能直接执行 OR:如果授权失败,它们会“切断”管道,因此,如果第一个失败,它将停止管道,而另一个将没有有机会被处决。

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

更多细节:

AuthorizeAttribute Class ASP.NET Web API Security Filters CodeProject WebAPI Security – Custom Authorization Filters

【讨论】:

以上是关于ASP.NET Web API 2 中带有 AuthorizationFilterAttributes 的条件 OR的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 中带有 ASP.NET Web API 项目的 Angular 项目

ASP.NET Web API 2 Bearer Token 重定向到登录页面而不是返回 401

ASP.NET MVC 2 中带有约束的可选路由参数?

ASP.NET Web API 2 入门教程

Asp.Net Web API 2第五课——Web API路由

Asp.Net Web API 2第三课——.NET客户端调用Web API