RBAC权限管理

RBAC是一种广泛应用的权限管理模型,通过用户、角色和权限三个核心元素实现灵活的权限分配。RBAC0是最基础的模型,后续的RBAC1引入角色继承,RBAC2添加了角色约束如互斥和基数限制,RBAC3结合了前两者并加入了用户组、组织和职位的概念,以适应更复杂的业务需求。这种模型可以有效地简化权限管理和维护,特别是在大型系统中。
摘要由CSDN通过智能技术生成

RBAC权限管理

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

1、RBAC模型

1.1、传统权限模型

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

1.2、什么是RBAC模型

RBAC增加了“角色”的概念,我们首先把权限赋予角色,再把角色赋予用户。这样,由于增加了角色,授权会更加灵活方便。RBAC把权限体系抽象成三个实体:用户、角色、资源(权限的抽象)。三个实体之间的关系如下:

 

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

 

举例:

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

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

2、RBAC0 模型

RBAC0是RBAC系列模型中的基础模型,随后的RBAC系列模型都将按照RBAC0基础模型进行改进。用户与角色的关系有两种设计,如下:

2.1 用户与角色多对一(一个用户只对应一个角色)

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

 

2、表设计图:

 

 优点:设计简单

缺点:

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

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

2.2 用户与角色多对多(推荐设计)

1、创建用户:

 

2、创建角色:

 

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

 

表设计图:

 

 

优点:

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

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

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

缺点:

  1. 用户膨胀:当用户量大时,为每个用户进行角色绑定维护起来麻烦。(引入用户组)
  2. 权限膨胀:当权限膨胀时,为每个角色绑定权限维护起来麻烦。(引入权限组)

3、RBAC1模型(角色继承)

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

 

举例:

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

4、RBAC2模型(角色约束)

RBAC2引入了角色互斥、基数约束、先决条件约束。角色互斥,一个用户能拥有角色A,就不能拥有角色B,角色A和角色B是互斥的。也可以是权限互斥,权限A和权限B不能在一个角色里。

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

先决条件约束,想获得某个上级角色,必须先拥有下级角色。

 

举例:

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

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

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

5、RBAC3模型

RBAC3基于RBAC0,将RBAC1RABC2进行了整合,是最全面的权限设计模型。其中涉及到的概念有用户组、组织、职位。
 

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

2. 组织对于组织结构复杂的公司,可以把组织架构和角色关联起来。一旦把某个人加入某个组织,该用户就会拥有该组织下的所有角色。

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

 

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

 

6、总结

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

Flask RBAC权限管理是指在Flask框架中使用基于角色的权限控制(Role-Based Access Control)来管理用户的访问权限。通过RBAC,可以根据用户的角色来控制其能够访问的资源和执行的操作,从而实现权限的精细控制。 在Flask中实现RBAC权限管理可以通过多种方式,其中一个常用的方法是使用Flask-Security扩展。Flask-Security提供了用户认证、角色管理和权限控制等功能,可以方便地实现RBAC权限管理系统。 首先,通过Flask-Security可以定义不同的角色,比如管理员、普通用户、编辑等,然后为每个角色分配对应的权限。权限可以包括访问特定的URL、执行特定的操作(比如新增、编辑、删除)等。当用户登录系统时,系统会根据用户的角色和权限来判断其能够访问的资源和执行的操作,从而实现权限控制。 另外,Flask-Security还提供了一些装饰器和方法,可以方便地在Flask视图函数中进行权限验证。比如可以使用@login_required装饰器来限制只有登录用户才能访问某个页面,也可以使用@roles_required装饰器来限制只有特定角色的用户才能访问某个页面。 总的来说,Flask RBAC权限管理通过定义角色和权限,然后在系统中进行权限验证,可以很好地实现对用户访问权限的管理和控制。这样一来,就可以保证系统的安全性和稳定性,确保用户只能访问其有权限的资源,从而提升系统的整体安全性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值