用户、角色和权限

我感觉,虽然很多人都可以做出一个成员资格管理的模块,但是能做的好的并不是很多。其中,有对这个成员管理原理不清楚的,也有实现能力不强的,等等。我觉得,要想做好成员资格管理,首先必须对成员资格管理的概念和原理有较为深刻的认识。然后,有个好的设计和实现。

所以,我将在下面和大家一起讨论一下成员资格管理的概念和原理。

在成员资格管理中有3个很重要的概念:用户,角色,权限。

用户是一个在业务逻辑中存在的实体或者虚实体(不可见,但存在)。用户带有某种目的和权利。

角色是具有某些共性的用户组成的集合(这个集合允许为空)。

权限是规定了的一系列的访问规则。权限的本质是规则。是规定哪些用户可以做哪些事情,哪些用户不可以做哪些事情的规则。

比如说,只有拥有经理的角色才能查看报表。我们解析的时候是这样的:有这么一批人可以查看报表,这批人有个共同的特征,那就是他们拥有经理的角色。经理的角色特征是,在现实的业务逻辑中是经理或者拥有经理一样高的权利。
在权限中定义的是用户和事情之间的关系,并没有涉及到角色。所以,如果不使用角色也可以实现成员资格管理。但是,角色作为某些用户的集合,这样对制定规格是更为方便、合理,也更符合业务逻辑的客观存在形式。

用户和角色的优先级:

在同一个功能操作的访问权限下,一个用户被拒绝/允许,但这个用户的角色却被允许/拒绝,那这个用户到底能不能执行这个功能操作?我们给出的答案的否定的。也是就如果有明确用户可以做或不能做则按照这个规定!为什么呢,因为角色只是为了更好的组织用户,它代表了一类的用户。但是这类人中必然存在差异性,直接明确用户访问规则就是为了承认或者实现这种差异性。用户具有原子性,但是角色是由用户组成的,所以它不具备原子性。只有原子性的对象才能够保证这个访问规则的正确性。

拒绝和允许的优先级:

allow 和 deny 的优先级,到底哪个高呢?由于用户可以有多个角色,但这些角色中有些角色被一访问规则允许,有些则被禁止,有些未定义。这时,我们是让这个用户通过还是拒绝通过。我们认为应该拒绝用户的通过。正是用户角色的复杂性,所以在没有足够证据证明"里面的有些角色被拒绝但实际上这个用户不应该拒绝"的情况下,应该先把这个用户拒绝掉。这也是出于安全性的考虑。

关于企业单位中的部门设置与角色的关系:

我认为部门是一个角色,是一个和现实有密切联系的特殊角色。这个角色中包含了一系列的用户(这个部门的员工,这个部门的计算机(虚拟用户)等等)

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成"用户-角色-权限"的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图)

角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统,"超级管理员"、"版主"都是角色。版主可管理版内的帖子、可管理版内的用户等,这些是权限。要给某个用户授予这些权限,不需要直接将权限授予用户,可将"版主"这个角色赋予该用户。 

当用户的数量非常大时,要给系统每个用户逐一授权(授角色),是件非常烦琐的事情。这时,就需要给用户分组,每个用户组内有多个用户。除了可给用户授权外,还可以给用户组授权。这样一来,用户拥有的所有权限,就是用户个人拥有的权限与该用户所在用户组拥有的权限之和。(下图为用户组、用户与角色三者的关联关系)

在应用系统中,权限表现成什么?对功能模块的操作,对上传文件的删改,菜单的访问,甚至页面上某个按钮、某个图片的可见性控制,都可属于权限的范畴。有些权限设计,会把功能操作作为一类,而把文件、菜单、页面元素等作为另一类,这样构成"用户-角色-权限-资源"的授权模型。而在做数据表建模时,可把功能操作和资源统一管理,也就是都直接与权限表进行关联,这样可能更具便捷性和易扩展性。(见下图)

请留意权限表中有一列"权限类型",我们根据它的取值来区分是哪一类权限,如"MENU"表示菜单的访问权限、"OPERATION"表示功能模块的操作权限、"FILE"表示文件的修改权限、"ELEMENT"表示页面元素的可见性控制等。

这样设计的好处有二。其一,不需要区分哪些是权限操作,哪些是资源,(实际上,有时候也不好区分,如菜单,把它理解为资源呢还是功能模块权限呢?)。其二,方便扩展,当系统要对新的东西进行权限控制时,我只需要建立一个新的关联表"权限XX关联表",并确定这类权限的权限类型字符串。

这里要注意的是,权限表与权限菜单关联表、权限菜单关联表与菜单表都是一对一的关系。(文件、页面权限点、功能操作等同理)。也就是每添加一个菜单,就得同时往这三个表中各插入一条记录。这样,可以不需要权限菜单关联表,让权限表与菜单表直接关联,此时,须在权限表中新增一列用来保存菜单的ID,权限表通过"权限类型"和这个ID来区分是种类型下的哪条记录。

到这里,RBAC权限模型的扩展模型的完整设计图如下:

随着系统的日益庞大,为了方便管理,可引入角色组对角色进行分类管理,跟用户组不同,角色组不参与授权。例如:某电网系统的权限管理模块中,角色就是挂在区局下,而区局在这里可当作角色组,它不参于权限分配。另外,为方便上面各主表自身的管理与查找,可采用树型结构,如菜单树、功能树等,当然这些可不需要参于权限分配。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在 .NET 开发中,用户角色权限是非常重要的概念。用户角色是指在系统中具有特定权限和访问权限用户组。权限则是指用户在系统中能够执行的特定操作或访问的资源。 在 .NET 框架中,提供了一些用于管理用户角色权限的开源工具和库。其中最常见的是 ASP.NET 身份验证和授权工具。 ASP.NET 身份验证和授权工具提供了一套完整的解决方案,用于管理用户身份验证、角色权限。它基于标准的身份验证和授权机制,可以轻松地集成到 .NET 应用程序中。 通过 ASP.NET 身份验证和授权工具,可以轻松地创建和管理用户角色,并将这些角色与系统中的特定权限关联起来。这样,当用户登录到系统时,系统可以根据用户角色来判断其是否有权限执行特定的操作或访问特定的资源。 此外,还有许多第三方开源库和工具可供选择,用于管理用户角色权限。这些开源工具通常提供了更灵活和可定制化的功能,可以根据具体需求来配置和管理用户角色权限。 总之,.NET 用户角色权限管理在开发中非常重要。通过使用开源工具和库,可以简化用户角色权限的管理,并提高系统的安全性和可维护性。 ### 回答2: .NET是一个广泛应用的开发框架,因此在.NET用户角色权限管理方面,也有许多开源解决方案可供选择。 在.NET中,用户角色表示不同用户的身份或角色,而权限则表示用户在系统中执行的操作或访问资源的能力。 对于用户角色管理,可以使用开源的身份认证和授权框架,如 IdentityServer4 或 Sustainsys.Saml2 。这些框架提供了强大的身份验证和授权功能,允许开发人员定义和管理不同用户角色。例如,可以通过配置角色、添加用户角色或自定义用户角色来管理用户角色。这些框架还提供了基于角色的访问控制,可以限制用户对特定资源的访问。 对于权限管理,开源的权限管理库如 Casbin 和 Authorization、NWebSec 等也提供了丰富的功能。这些库允许开发人员定义和管理具体的权限,例如通过定义不同的策略、规则或访问控制列表来实现。开发人员可以在应用程序中使用这些库来对用户的操作进行验证,判断用户是否具备执行该操作的权限。 除了这些开源解决方案,还有一些商业方案如 Azure Active Directory 可以用于.NET用户角色权限管理。这些解决方案提供了更广泛的功能,如单点登录、集中管理和更强大的身份验证和授权功能。 综上所述,对于.NET用户角色权限开源方面,开发人员有多种选择。他们可以根据自己的需求和项目的规模选择合适的解决方案,以实现灵活和安全的用户角色权限管理。 ### 回答3: .NET用户角色权限的开源方案有很多,以下介绍几个常用的: 1. ASP.NET Identity:ASP.NET Identity 是.NET中常见的一套开源的用户角色权限管理解决方案。它提供了一种简单且灵活的方式来管理用户角色和授权。使用ASP.NET Identity,开发人员可以轻松地实现用户注册、登录、重置密码以及分配角色权限等功能,而且还支持OAuth和OpenID等第三方认证。 2. IdentityServer:IdentityServer 是一个开源的身份认证服务器,可以轻松地将身份验证和授权功能添加到.NET应用程序中。使用IdentityServer,您可以为您的应用程序提供单点登录(SSO)和OAuth/OIDC认证服务。它支持多种身份验证协议,包括OpenID Connect、OAuth2和WS-Federation,而且可以与多种客户端应用程序(Web、移动、桌面等)无缝集成。 3. Authorization Server:Authorization Server 是一个.NET标准的授权服务器库,它基于OAuth 2.0和OpenID Connect规范,可以用于构建安全的API和Web应用程序。通过Authorization Server,您可以轻松地实现身份认证、令牌管理和访问控制等功能。它提供了丰富的API和中间件,能够与ASP.NET Core等.NET框架无缝集成。 总之,对于.NET用户角色权限的开源解决方案有很多选择。不同的解决方案适用于不同的开发需求和场景,开发人员可以根据自己的实际情况选择合适的解决方案来管理用户角色权限。以上只是其中的一些常见方案,开发人员还可以根据需要进行更进一步的调研和评估,以找到最适合自己项目的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值