【发布时间】:2011-02-19 20:31:25
【问题描述】:
我们目前正在我们的网络应用程序 (ASP.NET) 中设计一个用户角色和权限系统,我们似乎有几个案例 strong> 在经典的基于角色的访问控制 (RBAC) 中不适合。我将发布几个问题,每个问题都针对特定案例。这是我的第二个问题(第一个问题在这里:Non RBAC User Roles and Permissions System: checking the user's City)。
我们有以下情况:我们需要在我们的网络应用程序中实现一个经理角色。但是,经理可以属于一个或多个公司(在我们为其创建此网络应用程序的一大群公司中)。比如说,可以有“A公司和B公司的经理”、“C公司的经理”等等。
根据经理所属的公司,他可以访问某些操作:例如,他只能与他所属公司的客户沟通。即“A、B公司经理”只能与A、B公司的客户联系,不能与C公司的客户联系。他还可以查看A、B公司的客户详情页面,不能查看C公司的客户详情页面等。 .
这个案子似乎属于 RBAC。然而,事实并非如此。我们需要创建一个 ManagerRole 类,它有一个 Companies 属性——也就是说,这不仅仅是一个作为权限集合的角色(就像在经典的 RBAC ),而是一个具有属性的角色!
这只是具有属性的角色的一个示例。还会有其他角色:例如,管理员角色,它也属于许多公司,并且还具有其他自定义属性。
这意味着我们将一个层次结构或角色类:
class Role – base class
class ManagerRole : Role
List Companies
class AdministratorRole : Role
List Companies
Other properties
我们调查了纯 RBAC 及其在多个系统中的实现,发现没有系统具有层次结构或角色,每个系统都有自定义属性。在 RBAC 中,角色只是权限的集合。
我们可以使用 具有属性的权限来模拟我们的案例,例如 ManagerPermission、AdministratorPermission,但这有很多缺点,主要是我们将无法分配像“Manager of公司 A 和 B”直接向用户发送,但必须为公司 A 和 B 创建一个包含 ManagerPermission 的角色……此外,“经理”似乎是一个“角色”(公司中的职位)而不是“许可”从语言的角度来看。
将不胜感激有关此主题的任何想法以及该领域的任何经验!
谢谢。
【问题讨论】:
标签: asp.net asp.net-membership rbac