Asp.net 非RBAC用户角色和权限系统:具有属性的角色

Asp.net 非RBAC用户角色和权限系统:具有属性的角色,asp.net,asp.net-membership,rbac,Asp.net,Asp.net Membership,Rbac,我们目前正在我们的web应用程序(ASP.NET)中设计一个用户角色和权限系统,似乎我们有几个案例不适合经典的基于角色的访问控制(RBAC)。我将发布几个问题,每个问题都针对一个特定的案例。这是我的第二个问题(第一个问题在这里:) 我们有以下情况:我们需要在web应用程序中实现一个管理者角色。但是,经理可以属于一个或多个公司(在我们为其创建此web应用程序的一大组公司中)。比如说,可以有“A公司和B公司的经理”、“C公司的经理”等 根据经理所属公司的不同,他可以访问某些运营:例如,他只能与他所属

我们目前正在我们的web应用程序(ASP.NET)中设计一个用户角色和权限系统,似乎我们有几个案例不适合经典的基于角色的访问控制(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公司创建一个包含经理权限的角色。此外,从语言角度来看,“经理”似乎更像是一个“角色”(在公司中的职位),而不是一个“权限”

如果您对这个主题有任何想法,以及在这个领域有任何经验,我们将不胜感激


谢谢。

如果您认为问题可以通过实现角色继承来解决,您可以实现这一点


您的示例是采用基于属性的访问控制方式的另一个机会(例如允许具有经理角色并为a公司工作的用户)。但是,实现RBAC系统要困难得多。

首先让我说,您的两个问题基本相同,应该合并。同一概念的多个变体没有价值

你希望在基本角色上增加额外的任意歧视

要实现这种RBAC并保留利用任何内置基础设施的能力,您需要做出一些妥协并构建一些自定义实现

第一步是通过角色定义约定的折衷方案。e、 g.当您想确定用户是否担任“公司”的“经理”角色时,您需要将规则定义为“经理公司”,即
IsUserInRole(“经理公司”)

第二步是自定义RoleProvider实现,它可以解析并适当地查询维护层次关系的底层数据源,为此,您必须提供一个自定义UI进行维护

您至少需要实现ASP.Net使用的方法,以确保角色被选中或以正确的格式输出

IsUserInRole
将获得一个字符串,您必须使用约定将该字符串解析为组成段以进行验证,如前所述

在cookie中缓存角色时可以调用
GetRolesForUser
,并且必须执行角色的层次递归并输出所有排列。e、 g.用户是companyA和companyB的管理员,因此
GetRolesForUser(“用户”)
应返回一个由值
manager companyA
manager companyB
组成的数组,以供asp.net基础设施使用,该基础设施利用缓存的角色,而不以交互方式轮询角色提供者

这种方法将为您提供已建立的ASP.Net RBAC功能的最广泛可用性,同时为您提供所需的定制


因此,总而言之,无论何时,只要您可以调整您的期望和/或重新定义您的需求,以尽可能多地使用现有的基础架构,即您必须实际设计、实现的代码更少,测试和维护,您就必须花更多的时间专注于系统的其他方面,而这些方面还没有一个现成的基础设施。

我不确定这是否是您正在寻找的,但在我自己搜索有关RBAC系统的信息时,我想我可能发现了一些适合你的需要。我在读Tony Marston的一篇文章,他谈到虚拟私有数据库/行级安全性。这些将在数据级别授予权限,这意味着您可以将用户限制为数据库中某些信息子集。文章的链接如下

(请查看页面底部的“其他类型的访问控制”部分。)