目前,我们正在一个角色设计一个用户角色和权限系统在我们的Web应用程序(ASP.NET),它似乎是我们有几个案件那不适合在经典基于角色的访问控制(RBAC)。我会发布几个问题,每个问题都专注于一个特定的案例。这是我的第二个问题(第一个问题在这里:Non RBAC User Roles and Permissions System: checking the user's City)。非RBAC用户角色和权限系统:与性能
我们有以下情况:我们需要在我们的Web应用程序中实施经理角色。但是,经理可以属于一个或多个公司(在我们正在为其创建此Web应用程序的一大组公司内)。说,可以有“公司A和B的经理”,“公司C的经理”等。
根据经理所属的公司,他有访问某些操作:例如,他可以只与他所属公司的客户沟通。也就是说,“公司A和公司B的经理”只能与公司A和公司B的客户进行联系,而不能与公司C的客户进行联系。他还可以查看公司A和B的客户详细信息页,而不是C等。
看来这种情况属于RBAC。但是,情况并非如此。我们需要创建一个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的角色......此外,”经理“似乎更像是一个”角色“(在公司中的职位),而不是来自语言学的观点。
对于这个主题的任何想法以及此领域的任何经验,都不胜感激!
谢谢。
类似IsUserInRole(“manager-companyA”)的代码根本不漂亮。我们希望拥有像IsUserInRole(“manager”,companiesList)这样的代码。此外,角色的这些属性的数量可能很大,像“manager-companyA,companyB ...”这样的字符串可能会变得太长。 我认为我们可以通过自己创建我们自己的权限和角色系统,而不使用ASP.NET角色来做得更好。我真的没有看到任何麻烦。 – 2010-05-16 11:02:41
@micha - 你可能误解了我写的一些内容。也许审查可能会将其清除。并且设计,实施,测试和维护了几个定制的提供商堆栈,并为浪费的时间,金钱和睡眠感到后悔,我只能祝你好运。 – 2010-05-16 11:30:48
@code诗人。我不能同意重新创造轮子的谬论。但有时轮子不适合。一本很好的书是'\t \t 专业ASP.NET 2.0安全性,成员和角色管理' 它痛苦详细地描述每个事情如何滴答。 – ggonsalv 2010-05-20 03:30:16