RBAC 模型梳理

1. RBAC 模型是什么

RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。
RBAC 模型由 4 个基础模型组成:

  1. 基本模型 RBAC0(Core RBAC)
  2. 角色分层模型 RBAC1(Hierarchal RBAC)
  3. 角色限制模型 RBAC2(Constraint RBAC)
  4. 统一模型 RBAC3(Combines RBAC)
    RBAC 授权的过程可以抽象概括为:判断 Who 是否可以对 What 进行 How 的访问操作,以及这个逻辑表达式的值是否为 True 的计算过程。
    Who、What、How 构成了访问权限三元组,Who 是权限的拥有者或主体(User、Role),What 是资源(Resource),How 是具体的权限。
    在这里插入图片描述

1.1. 基本模型 RBAC0

RBAC0 是最基础也是最核心的模型,由五部分组成:用户(User)、角色(Role)、许可(Permission)、会话(Session)、操作(operations OPS)。
在这里插入图片描述
角色通过权限(许可)被授权资源,角色又授权到用户身上,通过会话管理用户和角色的授权关系,用户就继承了角色的访问资源权限。
我们举一个很简单的例子,例如:张三是一家企业的财务总监,同时他也是该企业对外的形象大使,财务总监有访问公司财务数据的权限,形象大使有访问公司市场部推广计划和编辑发言稿的权限。那么张三既有访问公司财务数据的权限,又有访问公司市场部推广计划和编辑发言稿的权限。突然有一天公司决定做职位调整,张三被任命为财务总监和人力资源总监,撤掉了形象大使。那么张三当前就只能访问财务总监和人力资源总监所对应的授权资源。

1.2. 角色分层模型 RBAC1

该模型主要是在 RBAC0 的基础上,增加了角色层级关系的继承逻辑,也就是说角色有了组织树的逻辑。
在这里插入图片描述
角色有了上下级关系,上一级的角色可以继承其下所有角色的授权资源。
再比如张三是一家企业的财务总监,同时他也是该企业对外的形象大使,财务总监有访问公司财务数据的权限,形象大使有访问公司市场部推广计划和编辑发言稿的权限。那么他的上级领导,比如是该公司的 CFO,既有访问公司财务数据的权限,又有访问公司市场部推广计划和编辑发言稿的权限。这是继承关系。
在这里插入图片描述

1.3. 角色限制模型 RBAC2

该模型主要添加了授权约束。约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。
责任分离包括:静态责任分离(SSD)和动态责任分离(DSD)。
在这里插入图片描述
SSD 是用户和角色的指派阶段加入的,主要是对用户和角色有如下约束:

  1. 角色互斥:同一个用户在两个互斥角色中只能选择一个。比如财务部有会计和审核员两个角色,他们是互斥角色,那么用户不能同时拥有这两个角色,体现了职责分离原则。
  2. 基数约束:一个角色被分配的用户数量受限,一个用户可拥有的角色数目受限,同样一个角色对应的访问资源权限数目也受限,以控制高级权限在系统中的分配。比如李四是 COO,王五不能也是 COO。同样的李四不能既是 COO 又是 CTO 又是 CFO。COO 、CTO、 CFO 三个角色所能访问的资源权限也不能是一模一样的。
  3. 先决条件约束:用户想要获得高级角色,首先必须拥有低级角色。
    DSD 是会话和角色之间的约束,可以动态的约束用户拥有的角色,也叫运行时互斥。如一个用户可以拥有两个角色,但是运行时只能激活一个角色。如一个人如果既是运动员又是教练,当比赛开始的时候,只能选择一个角色身份入场。

1.4. 统一模型 RBAC3

RBAC3 是 RBAC1 与 RBAC2 的合集,所以 RBAC3 是既有角色分层又有约束的一种综合授权模型了。

2. 什么是权限

权限是资源的集合,这里的资源指的是软件中所有的内容,包括模块、菜单、页面、字段、操作功能(增删改查)等等。具体的权限配置上,目前形式多种多样,按照我个人的理解,可以将权限分为:页面权限操作权限数据权限

2.1. 页面权限

所有系统都是由一个个的页面组成,页面再组成模块,用户是否能看到这个页面的菜单、是否能进入这个页面就称为页面权限。
在这里插入图片描述
客户列表、客户黑名单、客户审批页面组成了客户管理这个模块。对于普通用户,不能进行审批操作,即无客户审批页面权限,在他的账号登录后侧边导航栏只显示客户列表、客户黑名单两个菜单。

2.2. 操作权限

用户凡是在操作系统中的任何动作、交互都是操作权限,如增删改查等。

2.3. 数据权限

数据权限是指在一个系统,对于不同的用户或用户组,授予不同的数据访问权限的过程。
这里的数据权限包含菜单、页面以及字段等。这些权限可以限制用户可以访问哪些数据、以及他们可以对这些数据进行哪些操作。数据权限的目的是确保数据的安全性和保密性,同时也可以提高数据的可用性和可靠性。
简单举个例子:某系统中有销售部门,销售专员负责推销商品,销售主管负责管理销售专员日常工作,经理负责组织管理销售主管作业。
在这里插入图片描述
按照实际理解,“销售专员张三”登录时,只能看到自己负责的数据;销售主管2登录时,能看到他所领导的所有业务员负责的数据,但看不到其他团队业务员负责的数据。
换另外一句话就是:我的客户只有我和我的直属上级以及直属上级的领导能看到,这就是我理解的数据权限。
要实现数据权限有多种方式:

  1. 可以利用RBAC1模型,通过角色分级来实现。
  2. 在‘用户-角色-权限’的基础上,增加用户与组织的关联关系,用组织决定用户的数据权限。
    具体如何做呢?
  3. 组织层级划分
    在这里插入图片描述
  4. 数据可视权限规则制定
    上级组织只能看到下级组织员工负责的数据,而不能看到其他平级组织及其下级组织的员工数据等。
    通过以上两点,系统就可以在用户登录时,自动判断要给用户展示哪些数据了。

3. RBAC 设计实现

3.1. 用户-角色-权限

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

  1. 用户和角色是多对一关系,即:一个用户只充当一种角色,一种角色可以有多个用户担当。
  2. 用户和角色是多对多关系,即:一个用户可同时充当多种角色,一种角色可以有多个用户担当。
    那么,什么时候该使用多对一的权限体系,什么时候又该使用多对多的权限体系呢?
    如果系统功能比较单一,使用人员较少,岗位权限相对清晰且确保不会出现兼岗的情况,此时可以考虑用多对一的权限体系。
    其余情况尽量使用多对多的权限体系,保证系统的可扩展性。如:张三既是行政,也负责财务工作,那张三就同时拥有行政和财务两个角色的权限。

3.2. 用户-组织-角色-权限

在“用户-角色-权限”的基础上,增加了用户与组织的关联关系,组织决定了用户的数据范围的权限
在这里插入图片描述
系统都有数据私密性的要求:哪些用户可以看到哪些数据,哪些用户不可以看到哪些数据。这个时候,我们需要从组织结构出发思考数据范围权限其实是角色权限的重要属性,但是由于数据范围太灵活,如果加入“数据权限”,如果账号下的数据量较大,用户编辑数据权限的操作会很繁琐。因此现在主流的后台设计都会使用“组织结构”来对应数据权限。
在这里插入图片描述
常用数据范围设置:全部数据权限自定数据权限本部门数据权限本部门及以下数据权限仅本人数据权限

3.3. 用户-组织-岗位-角色-权限

在第二种权限体系上进行优化的,增加了用户与岗位的关联关系
在这里插入图片描述

4. 组织结构数据库存储

https://blog.csdn.net/tongluren381/article/details/114874080

参考:
https://www.zhihu.com/question/428429216
https://www.woshipm.com/pd/1150093.html
https://blog.csdn.net/hao2713636/article/details/132326046

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向AI应用开发实战分享 - 基础篇

“前端转AI,第一讲来了” 引言 如果你是一名前端开发,同时又对AI开发很感兴趣,那么恭喜你,机会来了。 如果不是也没关系,同样能帮大家了解AI应用的开发思路。 本文将带大家从面向AI开发的基础知识开始,再…

Vue3:ElementPlus分装动态列表查询表单和弹窗动态表单

文章目录 概要表单组件封装弹窗组件调用表单组件页面列表调用查询表单 表单组件封装 组件代码 <template><el-formref"ruleFormRef"class"elForm":inline"true":rules"rules":model"TableList"label-width"…

AlaSQL.js:用SQL解锁JavaScript数据操作的魔法

简介 先附上 github 地址 https://github.com/AlaSQL/alasql AlaSQL.js - JavaScript SQL database for browser and Node.js. Handles both traditional relational tables and nested JSON data (NoSQL). Export, store, and import data from localStorage, IndexedDB, or …

高德车道级安全预警再升级 10大场景全方位守护行车安全

今日起&#xff0c;2024年高考、端午节小长假相继到来&#xff0c;正值新一波出行高峰到来&#xff0c;高德地图车道级安全预警功能再次升级。升级后的车道级安全预警功能覆盖了10大安全风险较高的行车场景&#xff0c;全方位、超视距地为用户实时探测、预警行车风险&#xff0…

成都跃享未来教育咨询有限公司,值得信赖!

在浩渺的教育咨询市场中&#xff0c;成都跃享未来教育咨询有限公司以其独特的魅力和卓越的服务质量&#xff0c;成为了行业内的璀璨明星。作为一家致力于为学生提供全方位教育咨询服务的公司&#xff0c;成都跃享未来教育咨询有限公司始终坚持安全可靠的原则&#xff0c;为广大…

树莓派4B_OpenCv学习笔记4:测试摄像头_imread加载显示图像_imwrite保存图片

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日对之前的测试CSI摄像头函数进行一些理解说明&#x…

pytorch中的zero_grad()函数的含义和使用

optimizer.zero_grad() &#xff0c;用于将模型的参数梯度初始化为0。 #反向计算 loss.backward()#反向传播计算梯度 optimizer.step()#更新参数&#xff0c;梯度被反向计算之后&#xff0c;调用函数进行所有参数更新 #在反向传播计算时&#xff0c;梯度的计算是累加&#xff…

降噪是什么意思?视频如何降噪?一文了解全部

在视频制作的过程中&#xff0c;我们经常会遇到噪音问题&#xff0c;这些噪音可能来自拍摄环境、录制设备或其他源头。然而&#xff0c;对于初学者来说&#xff0c;降噪是什么意思&#xff0c;以及如何有效地在视频中进行降噪可能是一些疑惑的问题。本文将深入解释降噪的概念&a…

【算法】深入浅出爬山算法:原理、实现与应用

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

echarts学习: 绘制双y轴折线图

前言 我们公司项目中的折线图大都是双y轴的&#xff0c;因为这些图表往往需要同时展示水位和流量这两种不同单位的数据&#xff0c;因此如何绘制双y轴折线图就是就是我所面临的首要问题。 1.如何绘制双y轴 将yAxis属性的值设置为一个数组&#xff0c;并在数组中添加两个axis对…

【LC刷题】DAY02:977 209 59

#【LC刷题】DAY02&#xff1a;977 209 59 文章目录 977. 有序数组的平方 [link](https://leetcode.cn/problems/squares-of-a-sorted-array/description/)第一思路&#xff1a;直接排序优化&#xff1a;双指针 209. 长度最小的子数组 [link](https://leetcode.cn/problems/min…

Apache Spark MLlib详解

Apache Spark MLlib 是 Spark 的一个核心组件&#xff0c;提供了大量的机器学习算法和工具&#xff0c;用于在大数据集上进行数据分析和预测建模。MLlib 提供了广泛的算法集&#xff0c;包括分类、回归、聚类、协同过滤、降维、特征提取、频繁模式挖掘和统计测试等。 主要特点…

记录一次Linux启动kafka后并配置了本地服务连接远程kafka的地址后依旧连接localhost的问题

问题的原因 我是使用docker来安装并启动kafka 的&#xff0c;所以在启动过程中并没有太多需要配置的地方&#xff0c;基本都是从网上照搬照抄&#xff0c;没动什么脑子&#xff0c;所以看着启动起来了觉得就没事了&#xff0c;但是运行项目的时候发现&#xff0c;我明明已经配…

第五届上海市青少年算法竞赛网络同步赛(小学组)

第五届上海市青少年算法竞赛网络同步赛(小学组)T1. 符号译码_网络同步赛 内存限制: 256 Mb 时间限制: 1000 ms 题目描述 小爱为标点符号设计了一套编码系统,编码规则如下: [ 的编码为 010 ] 的编码为 101 < 的编码为 00 > 编码为 11 + 的编码为 011 - 编码为 100 根…

AI辅助论文:探索AI查重与AI降重技术

在科研领域&#xff0c;AI写作工具如同新一代的科研利器&#xff0c;它们能够极大提高文献查阅、思路整理和表达优化的效率&#xff0c;本质上促进了科研工作的进步。AI写作工具不仅快速获取并整理海量信息&#xff0c;还帮助我们精确提炼中心思想&#xff0c;显著提升论文写作…

生成式人工智能的风险与治理——以ChatGPT为例

文 | 西南政法大学经济法学院 马羽男 以ChatGPT为代表的生成式人工智能在创造社会福利的同时&#xff0c;也带来了诸多风险。因此&#xff0c;当务之急是结合我国生成式人工智能发展状况&#xff0c;厘清其应用价值与潜在风险之间的关系&#xff0c;以便在不影响应用发展的前提…

0606 作业

#include <stdio.h> #include <string.h>typedef struct usr{char unm[21];char pwd[21]; }user;int main(int argc, const char *argv[]) {FILE* userfilefopen("./user_tible.txt","r");printf("输入username:");user u;scanf(&qu…

人工智能在肿瘤预后预测中的最新研究进展|顶刊精析·24-06-07

小罗碎碎念 今天要分享的文献主题&#xff0c;大家一定非常熟悉&#xff0c;因为绝大多数AI4cancer的文章都会提到它——预后预测&#xff0c;所以今天的文献主题是——人工智能肿瘤预后预测。 在正式开始分享之前&#xff0c;我想先带着大家梳理两个问题。解决了以下两个问…

Chrome 自动执行 JS 脚本 | Tampermonkey 插件

文章目录 第 1 步:安装插件 Tampermonkey第 2 步:固定到工具栏第 3 步:在网站上启用 Tampermonkey第 4 步:查看效果第 5 步:调试 JS 代码😂 背景:有个网站,每次进去都要点 3 次才能把相关页面展开。而且,页面经常会自己刷新,导致展开的页面又收回去了。【这一天天的…

【Python】实现极致:克服PyInstaller打包挑战,解决libpython3.10.so.1.0库丢失难题

【Python】实现极致&#xff1a;克服PyInstaller打包挑战&#xff0c;解决libpython3.10.so.1.0库丢失难题 大家好 我是寸铁&#x1f44a; 总结了一篇【Python】实现极致&#xff1a;克服PyInstaller打包挑战&#xff0c;解决libpython3.10.so.1.0库丢失难题✨ 喜欢的小伙伴可以…