我们目前正在我们的 Web 应用程序 (ASP.NET) 中设计一个用户角色和权限系统,似乎我们有几个案例不适合经典的基于角色的访问控制 (RBAC)。我将发布几个问题,每个问题都针对特定案例。这是我的第二个问题(第一个问题在这里:非 RBAC 用户角色和权限系统:检查用户的城市)。
我们有以下情况:我们需要在我们的 Web 应用程序中实现一个Manager 角色。但是,经理可以属于一个或多个公司(在我们为其创建此 Web 应用程序的一大群公司中)。比如说,可以有“A 公司和 B 公司的经理”、“C 公司的经理”等。
根据经理所属的公司,他可以访问某些操作:例如,他只能与他所属公司的客户进行通信。即“A、B公司经理”只能与A、B公司的客户联系,不能与C公司的客户联系。他还可以查看A、B公司的客户详情页面,不能查看C公司的客户详情页面等。 .
此案似乎属于 RBAC。然而,事实并非如此。我们需要创建一个拥有Companies 属性的ManagerRole 类——也就是说,这不仅仅是一个作为权限集合的角色(如在经典 RBAC 中),而是一个具有属性的角色!
这只是具有属性的角色的一个示例。还会有其他角色:例如,管理员角色也将属于许多公司,并且还将具有其他自定义属性。
这意味着我们将有一个层次结构或角色类:
class Role – base class
class ManagerRole : Role
List Companies
class AdministratorRole : Role
List Companies
Other properties
我们调查了纯 RBAC 及其在几个系统中的实现,发现没有具有层次结构或角色的系统,每个系统都有自定义属性。在 RBAC 中,角色只是权限的集合。
我们可以使用具有属性的权限来模拟我们的案例,例如 ManagerPermission、AdministratorPermission,但这有很多缺点,主要是我们将无法直接将“公司 A 和 B 的经理”之类的角色分配给用户,但是必须为公司 A 和 B 创建一个包含 ManagerPermission 的角色……此外,从语言的角度来看,“经理”似乎是一个“角色”(公司中的职位)而不是“权限”。
将不胜感激有关此主题的任何想法以及该领域的任何经验!
谢谢你。