这不是一个重复的问题,或者说其他解决方案中给出的解决方案没有奏效。
让我们说有一个 cntroller
[Authorize(Roles=//set dynamically)]
public IActionResult DashBoard(LoginModel model)
{
}
我在以下问题中尝试了解决方案
-
动态添加角色以授权控制器的属性(错误:句柄方法 - 找不到合适的方法来覆盖)
所有这些解决方案都不起作用,因为接口中覆盖的方法不存在(例如,authorizeAttribute 不包含 AuthorizeCore 的定义),或者在某些情况下,IServiceCollection 服务不包含特定方法
1 回答
你不能这样做。
[Authorize(Roles=//set dynamically)]
必须在编译时知道。出于这个原因也使用角色是气馁,如评论中的 blowdart 链接帖子所指出的那样。相反,您应该使用声明和政策。声明是细粒度的权限,例如“CreateCustomer”或“DeleteCustomer”或“ViewDashboard”。
所以你必须像使用它一样
这些策略需要在编译时知道。
有关如何生成通用处理程序(而不是为每个策略编写新的 Handler)的示例,请参阅我的答案这里。
这将允许您创建可配置的角色。现在,您可以创建包含一系列声明的角色。每项索赔可能是一项政策。当用户登录时,您将属于角色的声明添加到用户声明列表中。
i.e。
支持:ViewDashboard,ViewCustomers,ViewContacts,ManageCases(支持票证)
经理:ViewDashboard,ManageCustomers(查看,编辑,删除),ManageContacts(查看,编辑,删除)
管理员:ManageDashboard(查看,编辑)
等等
从评论更新。