我正在编写一个(2.2)ASP.NET Core Web API,该API服务于SPA(Angular)前端。我想为分配某些角色给用户提供最大的灵活性,以确定哪些用户对应用程序的某些部分具有读/写访问权限。具体来说,我需要对标记有属性[UserInterface()]
的所有控制器进行单独的读写访问。假设我有两个标记有属性UserInterface
的控制器:AUserInterfaceController
和BUserInterfaceController
。
由于我需要对所有控制器进行单独的读/写,因此所有可能的访问声明都为:Read_AUserInterfaceController, Write_AUserInterfaceController, Read_BUserInterfaceController, Write_BUserInterfaceController
。我使用反射来确定所有主张,效果很好。
如何设置授权系统,以便能够将控制器中的“动作”标记为[ControllerAuthorization("Read")]
。 ControllerAuthorization
根据控制者的名字重新生成索赔的地方。
文档显示了如何通过在此处将字符串添加到提供的值之前来创建自定义的Claim: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/iauthorizationpolicyprovider?view=aspnetcore-2.2#custom-authorization-attributes 。这种方法似乎是一个很好的起点,但是它们使用的前缀是固定的,而我需要使用反射的运行时前缀。
然后,我需要编写一个自定义IAuthorizationProvider
,以便可以向ASP.NET Core提供正确的策略,但是在这里它们再次使用固定的前缀,而我的前缀应在运行时使用确定。反映。
我的方法是否可行?如果不可行,您建议采用哪种方法?