【工作中问题解决实践 三】深入理解RBAC权限模型

简介: 【工作中问题解决实践 三】深入理解RBAC权限模型

工作时遇到了需要设计一套权限系统,所以做了一些调研。目前业界比较通用的权限系统设计都是采用RBAC模型,那么我们详细理解下RBAC模型的概念以及一些实际使用中建议的使用规范:

RBAC权限模型

首先了解下RBAC权限模型的基本概念和几种模型分类。

1 RBAC权限模型

RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限,增加权限设置的扩展性。

为什么要有角色的概念:对于批量的用户权限调整,只需调整用户关联的角色权限,无需对每一个用户都进行权限调整,既大幅提升权限调整的效率,又降低了漏调权限的概率

2 RBAC模型分类

RBAC模型可以分为:RBAC0、RBAC1、RBAC2、RBAC3 四种,其中RBAC0是基础,也是最简单的,相当于底层逻辑,RBAC1、RBAC2、RBAC3都是以RBAC0为基础的升级

1-2-1 RBAC0模型

最简单的用户、角色、权限模型。这里面又包含了2种:

  • 用户和角色是多对一关系,即:一个用户只充当一种角色,一种角色可以有多个用户担当。一般适用于小型系统,角色岗位较为清晰,不会有兼岗的情况
  • 用户和角色是多对多关系,即:一个用户可同时充当多种角色,一种角色可以有多个用户担当。一般适用于较为复杂的系统,一个人可能既是人事HR,又是招聘负责人。

当前我们使用的场景一般都是:用户和角色是多对多关系的,简单多对一关系场景覆盖不全

使用场景:在某个公司,一个人可能既是人事HR,又是招聘负责人

1-2-2 RBAC1模型

相对于RBAC0模型,增加了子角色,引入了继承概念,即子角色可以继承父角色的所有权限,但是子角色必须是在父角色的基础上减少权限点

使用场景:如某个业务部门,有经理、主管、专员。主管的权限不能大于经理,专员的权限不能大于主管,如果采用RBAC0模型做权限系统,极可能出现分配权限失误,最终出现主管拥有经理都没有的权限的情况。而RBAC1模型就很好解决了这个问题,创建完经理角色并配置好权限后,主管角色的权限继承经理角色的权限,并且支持在经理权限上删减主管权限。

1-2-3 RBAC2模型

基于RBAC0模型,增加了对角色的一些限制:角色互斥、基数约束、先决条件角色等。

  • 角色互斥:同一用户不能分配到一组互斥角色集合中的多个角色,互斥角色是指权限互相制约的两个角色。案例:财务系统中一个用户不能同时被指派给会计角色和审计员角色。
  • 基数约束:一个角色被分配的用户数量受限,它指的是有多少用户能拥有这个角色。例如:一个角色专门为公司CEO创建的,那这个角色的数量是有限的。
  • 先决条件角色:指要想获得较高的权限,要首先拥有低一级的权限。例如:先有副总经理权限,才能有总经理权限。
  • 运行时互斥:例如,允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色

各类角色特性关系图如下:

1-2-4 RBAC3模型

称为统一模型,它包含了RBAC1和RBAC2,利用传递性,也把RBAC0包括在内,综合了RBAC0、RBAC1和RBAC2的所有特点

权限系统实现

所以一个权限系统需要具备如下的几个关键要素:

  • 项目:对权限服务来说,一个项目,即为一个服务对象,不同项目间的权限数据是相互隔离的。
  • 权限点:业务系统定义的一个具体的权限,一般定义为一种动作,如:签约、审批、增、删、查、改等,都可以是一个权限点。权限点不直接分配给用户。
  • 角色:一定数量权限点的集合。权限分配的单位与载体,目的是隔离用户与权限点的逻辑关系。
  • 权限约束:对一个权限点的附加限制,可配置为权限点的数据范围或附加条件。
  • 角色属性:对一个角色的附加属性,如:虚拟角色。角色属性通过"全局权限点"实现。(业务系统可自行定义,自行解释角色属性)
  • 全局权限点:是一种特殊的权限点,角色关联全局权限点后,全局权限点约束的键、值将作为角色属性返回。

全局权限点主要是当做角色属性来使用的,配置后,不需要为每个角色再配一遍,例如系统的首页查看权限,不是特别敏感,该项目下的用户列表都有权限查看

权限配置分类

我们平时使用的权限其实是有分类的,大体上分为三类:页面权限、操作权限、数据权限

使用的时候,页面权限和操作权限通过配置成相应的权限点实现,数据权限通过配置约束并附着在操作权限上生效。

权限配置规范

使用时需要有一些基本规范和建议,总体而言一个权限系统要设计的简单易用为妙,也不要被业务场景赶着跑,最好有全局意识:

  • 【强制】不要用约束定义操作行为。约束的作用就是限定权限点范围的,操作行为应该被定义为权限点,约束是控制数据范围的
  • 【建议】权限验证代码建议放到controller层,包括参数验证,参数转换,这一层的职责就是判定入参有效性,参数有效才向下一层传递,通用的业务无关权限代码可以放到一个类里,具体类的业务逻辑如有需要可继承实现。
  • 【建议】使用上不需要单独定义【xxx-数据权限】、【xxx-操作权限】,权限点要具体而实际,对应一个url路径或者一个接口,而权限点上配置的约束自然能充当该权限点的数据范围约束
  • 【建议】不要使用互斥权限,增加系统复杂度,并且用处感觉也不太大,在业务上也并没有实际场景,只是为了防止配错,这个概念是个负担
  • 【建议】不生造概念,不搞白名单或者其它自己想象的概念,所有的落地都是角色,依据角色的实际使用场景给它命名

总而言之,操作的落点是权限点,约束是权限点更细粒度的数据范围控制,而角色是和用户进行绑定的,简单用,搞复杂了会增加代码复杂度和理解难度

相关文章
|
设计模式 算法 安全
【设计模式】RBAC 模型详解
随着软件系统的复杂性和规模的不断增长,权限管理成为了一个至关重要的问题。在大型多人协作的系统中,如何有效地管理不同用户的访问权限,确保系统的安全性和稳定性,是每一个开发者都需要面对的挑战。为了解决这一问题,业界提出了一种被广泛应用的权限管理模型——基于角色的访问控制(Role-Based Access Control,简称RBAC)。希望通过本篇博客的学习,您能够深入了解RBAC模型的核心思想和实现原理,掌握如何在实际项目中应用RBAC模型来提高系统的安全性和可维护性。
1881 1
|
存储 安全 数据库
打破砂锅:Rails如何实现精细的RBAC权限控制?
【8月更文挑战第31天】 Ruby on Rails 中的权限控制系统是确保多用户 Web 应用安全的关键。基于角色的访问控制(RBAC)通过角色分配实现细粒度权限管理。本文介绍如何构建 RBAC 系统,包括创建角色和权限模型及其关联,并在控制器中执行权限检查。通过这种方式,可以有效地管理和保护应用资源。利用 Rails 的强大功能及社区资源(如 `cancancan` 或 `pundit`),可进一步提升权限控制的灵活性和安全性。
147 0
|
9月前
|
数据安全/隐私保护
PHP-Casbin 中 ABAC 的使用方法
PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理。
109 0
|
存储 监控 安全
深入理解RBAC权限系统
RBAC(Role-Based Access Control)是一种访问控制模型,其核心概念是基于角色的权限分配。该模型的设计目标是简化对系统资源的访问管理,提高系统的安全性和可维护性。
2449 2
深入理解RBAC权限系统
ly~
|
12月前
|
监控 Linux API
如何评估 SDL 图形库优化的效果
SDL(Simple DirectMedia Layer)是一个免费开源的多媒体开发库,广泛用于游戏和多媒体应用。优化后的SDL在性能、图像质量、加载速度、兼容性、跨平台性和开发效率等方面均有显著提升。性能方面,优化后的SDL提高了渲染效率和播放路数;图像质量上,通过先进的渲染技术提升了图像的清晰度和色彩准确性;加载速度方面,通过减少格式转换时间加快了图像加载速度;兼容性和跨平台性得到增强,支持多种操作系统和硬件设备;开发效率方面,简洁的API设计和丰富的文档帮助开发者快速上手,减少了开发时间和成本。这些优化使SDL成为游戏开发和多媒体应用的理想选择。
ly~
452 4
|
12月前
|
存储 应用服务中间件 PHP
设置nginx中文件上传的大小限制度
设置nginx中文件上传的大小限制度
|
存储 前端开发 JavaScript
面试官问:如果有100个请求,你如何使用Promise控制并发?
面试官问:如果有100个请求,你如何使用Promise控制并发?
814 0
|
安全 编译器 Go
Go 1.21: 泛型函数的全面回顾
Go 1.21: 泛型函数的全面回顾
|
关系型数据库 PostgreSQL
PostgreSQL异常重启postmaster.pid处理
PostgreSQL异常重启postmaster.pid处理
511 0
|
区块链
webp2jpg网页在线图片格式转换源码
webp2jpg-免费在线图片格式转化器, 可将jpeg、jpg、png、gif、 webp、svg、ico、bmp文件转化为jpeg、png、webp、webp动画、gif文件。 无需上传文件,本地即可完成转换!
207 0