当前位置:网站首页 > R语言数据分析 > 正文

rbac权限模型(rbac权限模型参考网站)



RBAC应用最为广泛的权限管理模型,核心的三要素是:用户、角色、权限,但并不仅仅局限于这三个核心要素,基于企业规模、用户规模、运维复杂度,RBCA其实是有很多的变种。从理论角度,有所谓的RBAC0、RBAC1、RBAC2、RBAC3等变种。

用户直接分配权限,每一个用户都需要勾选账号对应的每一个权限,当用户的权限都相同时都需要做重复的工作,也做不到批量修改用户权限,可见非常繁琐,维护起来非常麻烦。

也就是说,角色实际上是人与资源之间的中间桥梁,人可以通过拥有某个角色来获得该角色下的所有权限。如下所示:

举例:

如上图,如果按传统权限模型,给每一个用户赋予权限则会非常麻烦,并且做不到批量修改用户权限。这时候,可以抽象出几个角色,譬如普通员工、财务、采购等,然后把权限分配给这些角色,再把角色赋予用户。这样无论是分配权限还是以后的修改权限,只需要修改用户和角色的关系,或角色和权限的关系即可,更加灵活方便。此外,如果一个用户有多个角色,譬如王先生既负责财务和采购,那么可以给王先生赋予两个角色,即财务角色+采购角色,这样他就拥有这两个角色的所有权限。

当用户的工作内容发生变化时,如上图林总职务变更(从采购总监变更为财务总监),只需要重新绑定用户关联的角色,而不用一一删除该用户的权限再添加权限。

1、创建用户的时候选择角色,如下图:

2、表设计图:

优点:设计简单

缺点:

  1. 用户的创建依赖角色,即要先创建好角色后再创建用户
  2. 当一个用户同时拥有两个角色时,会使角色膨胀,如:

系统中有“人事”、“财务”、“经理”等角色,如张三同时兼职人事经理和财务经理,此时只能创建个新角色“人事&财务”来包含对应的操作权限。

1、创建用户:

2、创建角色:

3、建立用户与角色的关联关系:

表设计图:

优点:

1、用户创建不依赖于角色,用户与角色之间的关系单独维护。

2、当一个用户同时拥有多个角色对应的权限时,只需要把用户绑定到对应的多个角色,

不需要重新定义新角色来绑定。

缺点:

RBAC1,基于RBAC0的优化,增加了角色的分层(即:子角色),子角色可以继承父角色的所有权限;角色继承的RBAC模型的思路是上层角色继承下层角色的所有权限,并且可以额外拥有其他权限。

举例:

视频网站,付费会员角色继承普通会员角色,那么付费会员除了普通会员的权限外还具备浏览付费内容的权限。

基数约束,一个角色被分配的用户数量有限;一个用户拥有的角色数量有限;一个角色被分配的权限数量有限;以便控制高级权限在系统中的分配;

举例:

1、一个人不能既是裁判,又是运动员;

2、譬如给一个用户分配了财务经理的角色,就不能给他再赋予审计经理的角色了,否则他即可以录入账单又能自己审核账单;

3、有些公司对角色的升级十分看重,一个财务员工要想升级到财务经理,必须先升级到财务主管,这时候就要采用先决条件限制了。

1、用户组平台用户多,角色类型增多,有一部分人具有相同的属性。比如生产部的所有员工等,如果直接给这些用户分配角色,就会增加管理员的工作量。如果给这些用户分组,并给用户组分配角色,用户组里的每个用户都具有用户组下的角色。如果用户退出用户组,就撤销用户组下的角色,这样就大大减少了管理员的工作量,无需管理员手动管理角色。用户组又分为具有上下级关系的用户组、普通用户组。具有上下级关系的用户组,和部门、职位关联起来。按照部门和职位对用户进行分组。普通用户组,没有上下级没关系,和部门职位也没有关系。纯粹地对用户进行分组。

3、职位每个部门下有很多职位,职位不同,职位的权限也不同。把职位和角色关联起来,一旦赋予某人某个职位,该用户就会拥有该职位下的所有角色。特殊情况下,一个人可以拥有多个职位。

在实际开发中,根据不同的业务需求,会有各种各样的演变,业务逻辑复杂的,权限系统也复杂,想要做出通用全面且高效的权限模型,还是非常不容易的。现在就把用户组、组织、职位、角色互斥、基数约束汇总起来画个草图。

权限模块是一个系统中最基础也是非常重要的一个模块。要考虑角色继承就使用RBAC1模型,要考虑角色互斥、基数约束、先决条件约束就使用RBAC2模型。中小型公司使用RBAC0模型就足以使用,超大型的公司再考虑RBAC3设计模型,也可以根据实际的业务需要进行适当的裁剪。

转载自

https://blog.csdn.net/haoa0320/article/details/

到此这篇rbac权限模型(rbac权限模型参考网站)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • rme adi2 dac pro 区别(rme adi-2 dac)2026-05-04 10:18:09
  • entorevolution翻译(ennoble翻译)2026-05-04 10:18:09
  • oracle 代码(oracle 代码和脚本查询结果不一致)2026-05-04 10:18:09
  • redis怎么连接(redis如何连接)2026-05-04 10:18:09
  • 怎么下载junit包(junit官网怎么下载jar包)2026-05-04 10:18:09
  • store与shop的区别(shop跟store有什么区别)2026-05-04 10:18:09
  • rise是什么意思(surprise是什么意思)2026-05-04 10:18:09
  • redis-cli连接(redis-cli连接redis集群)2026-05-04 10:18:09
  • water heater(waterheater怎么读)2026-05-04 10:18:09
  • webform和mvc(webform和mvc的区别)2026-05-04 10:18:09
  • 全屏图片