权限系统设计方案 RBAC模型
文章目录
- 1.权限模型
- 1.1 权限设计
- 1.2 为什么需要角色
- 1.3 权限模型的演进
- 1.3.1 RBAC模型
- 1.3.2 角色继承的RBAC模型
- 1.3.3 带约束的RBAC模型
- 1.4 用户划分
- 1.4.1 用户组
- 1.4.2 组织
- 1.4.3 职位
- 1.5 理想的RBAC模型
- 2.权限系统表设计
- 2.1 标准RBAC模型表设计
- 2.2 理想RBAC模型表设计
1.权限模型
1.1 权限设计
从业务分类上来讲权限可以分为数据查看权限
,数据修改权限
等, 对应到系统设计中有页面权限、菜单权限、按钮权限等。菜单也分一级菜单、二级菜单甚至三级菜单.
按照这个架构,按钮的父级是二级菜单,二级菜单的父级是一级菜单,这样用户申请权限的时候非常清晰的看到自己需要哪些权限。
1.2 为什么需要角色
这种模型能够满足权限的基本分配能力,但是随着用户数量的增长,这种模型的弊端就凸显出来了,每一个用户都需要去分配权限,非常的浪费管理员的时间和精力,并且用户和权限杂乱的对应关系会给后期带来巨大的维护成本。用户-权限对应关系图:
种对应关系在用户多的情况下基本无法维护了。其实很多用户负责同一个业务模块所需要的权限是一样的,这样的话我们是不是可以借助第三个媒介,把需要相同的权限都分配给这个媒介,然后用户和媒介关联起来,用户就拥有了媒介的权限了。这就是经典的RBAC
模型,其中媒介就是我们通常所说的角色。
1.3 权限模型的演进
1.3.1 RBAC模型
在这里面角色起到了桥梁左右,连接了用户和权限的关系,每个角色可以拥有多个权限,每个用户可以分配多个角色,这样用户就拥有了多个角色的多个权限。
1.3.2 角色继承的RBAC模型
角色继承的RBAC模型: RBAC1模型, 角色继承的RBAC模型的思路是上层角色继承下层角色的所有权限,并且可以额外拥有其他权限。
下级角色拥有的权限,上级角色都拥有,并且上级角色可以拥有其他的权限。角色的层级关系可以分为两种,一种是下级角色只能拥有一个上级角色,但是上级角色可以拥有多个下级角色,这种结构用图形表示是一个树形结构
还有一种关系是下级角色可以拥有多个上级角色,上级角色也可以拥有多个下级角色,这种结构用图形表示是一个有向无环图
1.3.3 带约束的RBAC模型
带约束的RBAC模型: RBAC2模型, 常见的约束条件有:角色互斥、基数约束、先决条件约束等。
角色互斥: 如果角色A和角色B是互斥关系的话,那么一个用户同一时间不能即拥有角色A,又拥有角色B,只能拥有其中的一个角色。
基数约束: 同一个角色被分配的用户数量可以被限制,比如规定拥有超级管理员角色的用户有且只有1个;用户被分配的角色数量也需要被限制,角色被分配的权限数量也可以被限制。
先决条件约束:用户想被赋予上级角色,首先需要拥有下级角色,比如技术负责人的角色和普通技术员工角色是上下级关系,那么用户想要用户技术负责人的角色就要先拥有普通技术员工的角色。
1.4 用户划分
- 用户组
- 组织
- 职位
1.4.1 用户组
用户组是一群用户的组合,而角色是用户和权限之间的桥梁。
给权限分组也是个技术活,需要理清楚权限之间的关系,比如支付的运营后台我们需要查各种信息,账务的数据、订单的数据、商户的数据等等,这些查询的数据并不在一个页面,每个页面也有很多按钮,我们可以把这几个页面以及按钮对应的权限组合成一个权限组赋予角色。
实际工作中我们很少给权限分组,给用户分组的场景会多一些,有的时候用户组也可以直接和权限关联,这个看实际的业务场景是否需要,权限模型没有统一的,业务越复杂业务模型会约多样化。
1.4.2 组织
按照这个组织架构,每一个组织里的成员使用的基础权限很可能是一样的,比如人力资源都需要看到人才招聘的相关信息,市场推广都需要看到行业分析的相关信息,按照组织来分配角色会有很多优势:
实现权限分配的自动化: 和组织关系打通之后,按照组织来分配角色,如果有新入职的用户,被划分在某个组织下面之后,会自动获取该组织下所有的权限,无需人工分配。又比如有用户调岗,只需要把组织关系调整就可以了,权限会跟着组织关系自动调整,也无需人工干预。这么做首先需要把权限和组织关系打通。
控制数据权限: 把角色关联到组织,组织里的成员只能看到本组织下的数据,比如市场推广和大客定制,市场推广针对的是零散的客户,大可定制针对的是有一定体量的客户,相互的数据虽然在一个平台,但是只能看自己组织下的数据。
加入组织之后的RBAC模型如下所示
用户可以在多个组织中,因为组织也有层级结构,一个组织里只可以有多个用户,所以用户和组织的关系是多对多的关系,组织和角色的关系是一对一的关系。这个在工作中可以根据实际情况来确定对应关系。
1.4.3 职位
一个组织下面会有很多职位,比如财务管理会有财务总监、财务主管、会计、出纳员等职位,每个职位需要的权限是不一样的,可以像组织那样根据职位来分配不同的角色,由于一个人的职位是固定的,所以用户跟职位的对应关系时一对一的关系,职位跟角色的对应关系可以是多对多的关系。加入职位的RBAC模型如下所示
1.5 理想的RBAC模型
RBAC模型根据不同业务场景的需要会有很多种演变,实际工作中业务是非常复杂的,权限分配也是非常复杂的,想要做出通用且高效的模型很困难。我们把RBAC模型的演变汇总起来会是一个支撑大数据量以及复杂业务的理想的模型。把RBAC、RBAC1、RBAC2、用户组、组织、职位汇总起来的模型如下所示:
按照这个模型基本上能够解决所有的权限问题,其中的对应关系可以根据实际的业务情况来确定,一般情况下,组织和职位是一对多的关系,特殊情况下可以有多对多的情况,需要根据实际情况来定。
理想的RBAC模型并不是说我们一开始建权限模型就可以这么做,而是数据体量、业务复杂度达到一定程度之后可以使用这个模型来解决权限的问题,如果数据量特别少,比如刚成立的公司只有十几个人,那完全可以用用户-权限模型,都没有必要使用RBAC模型。
2.权限系统表设计
2.1 标准RBAC模型表设计
标准RBAC模型的表是比较简单了,要表示用户-角色-权限
三者之前的关系,首先要创建用户表、角色表、权限表,用户和角色是多对多的关系,角色和权限是多对多的关系,需要再创建两章关系表,分别是用户-角色关系表和角色-权限关系表。这六张表的ER图如下所示
2.2 理想RBAC模型表设计
理想的RBAC模型是标准RBAC模型经过多次扩展得到的,表结构也会比较复杂,因为要维护很多关系,如下图所示是理想的RBAC模型的ER图:
权限系统设计方案 RBAC模型相关推荐
- 权限系统与RBAC模型
目录 一.权限系统与 RBAC 模型概述 二.RBAC 模型简述 2.1 RBAC0 2.2 RBAC1 2.3 RBAC2 2.4 RBAC3 2.5 RBAC 的优缺点 三.实用的 RBAC 模型 ...
- (附表设计)不是我吹!超级全面的权限系统设计方案面世了
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:cnblogs.com/iceblow/p/11121362 ...
- 超级全面的权限系统设计方案
权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题. 目前在公司负责权限这块,所 ...
- 架构设计参考项目系列主题:最全的权限系统设计方案
本文转自:Java高性能架构 目录 1 为什么需要权限管理 2 权限模型 2.1 权限设计 2.2 为什么需要角色 2.3 权限模型的演进 2.4 用户划分 2.5 理想的RBAC模型 3 权限系统表 ...
- 史上最强大的权限系统设计方案——极简主义
权限模型设计--资源-组-标签模型/Resources-Group-Tag(RGT) 1.前言 RBAC模型可以说是权限模型的事实标准了,也有大量基于其的变种或增强设计,如RBAC0.RBAC1.RB ...
- 全网最全的权限系统设计方案
本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...
- 权限系统设计及RBAC模型
概述 对于一个企业级的平台或系统或站点,权限模块或系统是必不可少的.权限管控,即权力限制,不同的人由于拥有不同权力,他所看到的.能使用的东西不一样.对应到一个应用系统,其实就是一个用户可能拥有不同的数 ...
- 权限系统设计方案(图解)
1 为什么需要权限管理 日常工作中权限的问题时时刻刻伴随着我们,程序员新入职一家公司需要找人开通各种权限,比如网络连接的权限.编码下载提交的权限.监控平台登录的权限.运营平台查数据的权限等等. 在很多 ...
- 全网最全的权限系统设计方案(建议收藏
1 为什么需要权限管理 日常工作中权限的问题时时刻刻伴随着我们,程序员新入职一家公司需要找人开通各种权限,比如网络连接的权限.编码下载提交的权限.监控平台登录的权限.运营平台查数据的权限等等. 在很多 ...
最新文章
- WinAPI: SetWindowPos - 改变窗口的位置与状态
- [翻译]Axure-Dynamic Panel(Basic)-原型设计工具Axure学习-第2.1节
- python【Matlibplot绘图库】利用matlibplot绘制雷达图
- 1、solr包结构介绍,solrCore的安装配置,solr部署到Tomcat,多solrCore配置,配置中文分词器,界面功能介绍,Schema.xml的基本使用,数据导入
- TabHost两种实现方式
- jacob 实现Office Word文件格式转换
- The import org.junit.jupiter cannot be resolved 报错
- 电子文档秒变手写文字:这个工具绝了!!
- 如何通过里程碑控制项目进度
- 软件是如何驱动硬件的,代码是怎样对计算机实现控制的?
- Amoeba:开源的分布式数据库Porxy解决方案
- Hive(11):Hive的函数之内置函数
- c语言程序设计新编教程答案钱雪忠,新编C语言程序设计教程
- 记录一个Xcode上传App报错的问题
- Office365 自定义模板(恢复)
- java 定时关机_「window定时关机命令」电脑定时关机命令,这个方法适用于win7及以下系统 - seo实验室...
- android无缝切换播放器,Android使用MediaPlayer和TextureView实现视频无缝切换
- 在URLOS中运行Ghost博客docker镜像
- 小功率静电保护器与TVS管选型,看完醍醐灌顶
- OpenOffice转PDF遇到的问题