过去,在.NET框架上使用ASP.NET MVC时,我总是在内置的基于角色的授权之上实现基于权限的授权层。所谓“基于权限”,我的意思是将枚举权限的列表分配给每个角色,并且在运行时,每个调用都检查是否有权限,而不是角色。
e、 假设OrdersController上的Post方法需要AddOrEditOrder权限。看起来像是
[MyAuthorize(MyRights.AddOrEditOrder)]
在行动后。然后在其他地方,您可以配置只有Manager和CustomerRep角色才具有此权限。
我一直认为这个小抽象层很容易实现,并且大大提高了可维护性,即使角色映射的权限只是从配置文件而不是UI中更新的。来自基于Windows的IT设置,这就是IMO所说的“正确的做法”。
然而,转移到ASP.NET核心身份,我们有了所有这些新的想法和主张。现在,我意识到权利和主张完全不是一回事。但是,您能否使用声明,将它们分配给角色,并有效地完成我上面描述的工作?
它基于数据库架构显示,您可以将声明分配给角色,也可以将角色分配给用户。所以,在理论上,将声明“AddOrEditOrder”添加到“Manager”和“CustomerRep”角色中可以实现我的想法。然后我就把
[Authorize("AddOrEditOrder")]
我可以这样使用声明和角色而不必认真思考吗?
正如@Ruard van Elburg给出的有用答案所表明的那样,我错误地写了“索赔”,我的意思是“政策”。用一个代替另一个,我说的每句话都管用。“权限”的另一个词是“权限”,在这个相关的问题及其主要答案中有一些非常有用的建议:
How to implement Permission Based Access Control with Asp.Net Core