Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net Core 2.1中的自定义授权筛选器与策略_C#_Asp.net Core_Asp.net Core Webapi - Fatal编程技术网

C# ASP.Net Core 2.1中的自定义授权筛选器与策略

C# ASP.Net Core 2.1中的自定义授权筛选器与策略,c#,asp.net-core,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Webapi,我正在设计一个新的ASP.NETCore2.1WebAPI,并试图找出实现一个符合我们需要的授权系统的最佳方法。我们的角色和权限是数据库驱动的,可以混合和匹配基于角色和单个资源的权限。因此,对于给定的端点,默认访问权限可能是基于角色的(比如说仅限管理员),但管理员也可以为单个用户分配对该端点的访问权限(或者相反;并撤销对特定资源的访问权限,否则由角色授予)。因此,每个端点授权都需要一个DB查询来确定对该资源的有效访问。在我看来,这里似乎需要一个自定义授权过滤器,但许多MS文档和其他资源都会推送基

我正在设计一个新的ASP.NETCore2.1WebAPI,并试图找出实现一个符合我们需要的授权系统的最佳方法。我们的角色和权限是数据库驱动的,可以混合和匹配基于角色和单个资源的权限。因此,对于给定的端点,默认访问权限可能是基于角色的(比如说仅限管理员),但管理员也可以为单个用户分配对该端点的访问权限(或者相反;并撤销对特定资源的访问权限,否则由角色授予)。因此,每个端点授权都需要一个DB查询来确定对该资源的有效访问。在我看来,这里似乎需要一个自定义授权过滤器,但许多MS文档和其他资源都会推送基于策略的身份验证,并建议不要“自己滚动”。我不知道基于策略的解决方案在这里如何工作,因为它是基于静态策略声明的。我们的需求是否可以通过策略得到满足,或者自定义身份验证过滤器是否可行?

策略身份验证是否可行。是的,它可能基于某种“静态”策略,即多个操作/控制器可能最终使用类似于
[Authorize(policy=“MyPolicy”)]
的东西,但策略本身不是静态的。您可以在策略处理程序中定义任意数量的条件。你也可以混搭。因此,如果说某些东西只对“Foo”角色可用,但您还需要“Bar”策略定义的对象级权限,那么您当然可以执行类似于
[授权(Roles=“Foo”,policy=“Bar”)]

的操作,谢谢Chris,但是,如果我需要灵活地在每个控制器操作的基础上覆盖基于角色的权限,这难道不意味着我需要针对每个端点方法的策略吗?嘿@Bryan Lewis,我也处于类似的情况。我很好奇,你到底走了哪条路?有什么优点或缺点吗?