基于RBAC模型的权限设计思路

2023-11-13

一、RBAC模型

进行设计前,最好能够理解技术模型。在业界接受度较高的功能权限模型是RBAC(Role-Based Access Control)模型,其基本理念是将“角色”这个概念赋予用户,在系统中用户与权限之间通过角色进行关联,以这样的方法来实现灵活配置。以下就模型与设计相关的几点做一下简单介绍。

 

1. 基本的RBAC模型

如果没有角色的概念,系统中每加入一个用户,就需要为这个用户配置一遍权限,下图是wiki中直接为用户权限管理方式,可以看出管理成本巨大。

而引入“角色”概念后,如下图即是RBAC模型中最基本的模型:用户与角色可为多对一或多对多的关系,当一个用户的角色为多对多时,当前用户的权限是多个角色的并集。

此时只需要为角色赋予权限,能够大大减轻管理负担,同时将用户与权限解耦,提供更大的灵活性。

 

2. 引入用户组概念的RBAC模型

在大型平台的应用上,试想如果用户量上万,新增一个角色时,可能需要为大量用户都分配一遍新的角色,工程量仍然巨大,此时即可以引入用户组的概念。如果部分用户的使用场景是相对一致和基础的,我们可以把这些用户打包成一个组,基于这个组的对象进行角色和权限的赋予。

同理如果权限较多时也会存在一样的问题,处理方式是引入权限组的概念,将使用场景相对固定的一组功能或权限打包成组赋予角色。但是一般来讲一个系统中权限功能的体量是相对有限和可控的,所以实际应用中对权限组的使用较少。

下图所示为mac系统中运行添加用户组,并以用户组为单位配置权限。

需要注意的是即使有用户组或权限组的存在,也可以允许用户或权限与角色直接关联,这个可以视具体业务情况而定。

 

3. 角色继承的RBAC模型

在一个业务场景中,如果角色需区分:设计主管、设计组长、设计成员,并且管理方式为向下兼容时,则需使用角色继承的RBAC模型。上层角色继承下层角色的全部权限,且可额外赋予权限。

此时除了对角色进行定义,还需要管理角色间的关系,通过关系来体现角色的层级关系,从而达到继承权限的效果。角色的继承关系主要有两种:树形图和有向无环图。

继承关系常常来源于公司团队的组织结构,此时常将角色与组织结构进行关联达到继承角色模型的效果。如下图所示的赵同学,其角色是“三级团队负责人”,与其并列的小组中有多个“三级团队负责人”的角色,但依附于左侧的组织结构树,各级负责人仅有查看和操作自己下属子节点的权限。

 

4. 限制的RBAC模型

在一个产品或系统中,部分角色可能是需要隔离的、不允许被同时赋予一个人的。跟大家熟知的“不能既是‘运动员’又是‘裁判员’ ”一个道理。

因此,对于众多角色中的一组,只能是单选的关系,但多组角色之间可以共同存在。如下图中,一个用户可以既为设计师又为管理员,但在设计师角色组中仅能被赋予一个角色,在管理员角色组中也仅能被赋予一个角色。

此外,限制还有可能是数量上的,比如一个产品组中必须有且只有一个管理员,不允许删除或再分配管理员角色,仅允许将负责人角色变更。

限制的模型不仅仅对分配过程产生影响,有时即使拥有了多种角色,因为不同的角色对同一个功能的使用方式或数据会产生冲突,所以使用时也需要进行限制。如下图所示为同一时间仅允许以一个身份登录。

根据不同的业务需求,限制的形式很多。需要注意的是不能仅依赖后端限制,而是要在前端展示清晰的规则和恰当的限制,避免用户出错和沮丧。

 

二、权限的拆分与设计

通过RBAC模型已经能够很好的搭建起用户、角色与权限之间的关系了。但具体是什么样的关系,以及“权限”这个抽象的概念具体如何规划?

这些都需要分析清楚才能进一步设计出完善的权限系统。

首先需要知道,一般产品的权限由页面、操作和数据构成。页面与操作相互关联,必须拥有页面权限,才能分配该页面下对应的操作权限。数据可被增删改查。

整体关系如下图所示:

因此,在设计之初我们就需要考虑到未来可能区分角色的地方,尽量解耦、模块化。对于技术来说,每一个页面模块、每一个操作都最好使用独立的接口。对于设计来说,需要保障所有角色因为权限而屏蔽掉部分操作和数据后,页面和流程仍能体验流畅。

保证初期设计支持后,配置权限时,还需要注意以下几点:

(1)确定是否支持前端配置

如果角色和权限相对固定,则一般将角色与权限的关系可以写在后台,改动时需要后端变更且重新上线。这种情况适用于公司内部系统等只有一个使用主体的系统。

如果需要自定义角色或者每个角色在不同使用者的场景下有不同的权限,则需要将角色的定义、角色与权限之间的配置体现在“前端用户配置页面”。这种情况适用于有频繁变动的自定义角色权限,和有租户体系的系统。

(2)以基本单元拆分,以业务逻辑配置

一般可将每个对象的“增、删、改、查”各自作为一个基本的权限单元。打个比方,在“人员管理”中,查看人员列表、添加人员、删除人员、编辑人员信息最好拆分为4个权限单元。在技术和设计上,我们希望能尽量做到解耦和模块化。

但是在业务层面有些操作却是一体的。这些不能拆开的权限在“前端用户配置页面”中建议打包成一个整体提供配置。例如:如果我们确定在系统的现有和未来业务中,仅分为普通成员有“人员管理”的查看权限,管理员有操作权限,则可将“增、删、改”三个基本权限单位合并为“操作”权限进行配置。

(3)页面权限优先于操作和数据权限

必须配置了页面模块权限后,才能配置当前页面模块下具体的操作权限,以及页面模块的数据展示权限。

(4)查看权限优先于增删改权限

正常情况下,一定要先能查看某个模块或操作,其它的增删改操作才有意义。因此在设计时,应在获取查看权限前限制其它权限的配置,或者配置其它权限时默认赋予查看权限。

(5)角色与权限的多种关系

角色与权限的关系不仅是单纯“是/否关系”,还包括以某种限制进行操作,和以某种程度访问数据。

例如在“人员管理”中:

数据范围:用户拥有查看人员列表的权限,但仅能查看自己所在的团队;数据边界限制(上限等):添加人员时不能超过20个等。数据字段:HR能查看人员列表中包括职级、薪资等字段,其它角色仅能查看姓名邮箱等字段;

(6)角色与权限的设计表达

在传达一个系统的权限设计规则时,设计师常常习惯用主观最直接的方式表达想法,如用“当……时,就……”的句式来表达。但一个平台中涉及的权限规则是非常多的,当通篇以这样的形式描述时,表达对象将很难理解。

正确的描述方式:更清晰的是基于开发的语言,和技术模型的结果进行表达。将各角色与权限单元绘制成网格,每个交叉点网格中描述该角色与权限的数据关系和限制。

如下图所示:

 

三、需要注意事项

1. 隐形的admin

在可自定义角色和权限的系统中,一般需要预留一个admin角色来进行系统的初始配置,用于添加首批的业务人员和配置基本的角色。

有的系统中允许存在上帝视角的admin角色,则其可以作为“超级管理员”显示在角色配置的列表中。有的系统中不允许这种角色存在,则可将这种角色设置为隐形的状态,仅赋予维护系统的工作人员。

 

2. 初始权限的赋予

对于允许用户自行加入的系统,需要设定一至多个默认的角色,有时可以是仅有最基础权限的“游客”角色。

初始权限还可以与用户既有的某些数据字段进行关联,如添加用户时获取到用户的岗位为“设计师”,则直接赋予“设计师”角色的权限。

 

3. 人员管理中对自己的处理

在人员管理中,管理员角色处理自己时需要额外注意。因为如果修改或删除了自己角色后,可能导致系统没有管理角色,从而无法添加其他成员和正常运行。设计时可添加判断,当自己为唯一管理角色时,禁止编辑和删除。

 

4. 无页面权限的提示

虽然可以通过页面权限限制直接隐藏当前用户没有权限的页面,但不能排除用户获取到权限外的url地址。当用户意外访问到没有权限的页面时务必提供“无权限”的提示,避免用户认为系统bug。

 

最后

总结一下,整个权限系统设计就是定义各个节点和节点间关系的过程。

 

节点包括:

用户;用户组;角色;角色组;权限(页面、操作、数据);权限组(页面、操作、数据);

关系包括:

                是/否关系;

                继承关系;

               限制关系(互斥、范围限制、边界限制、字段限制……)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于RBAC模型的权限设计思路 的相关文章

  • 分布式事务学习总结

    1 基础概念 1 1 什么是事务 事务可以看做是一次大的活动 它由不同的小活动组成 这些活动要么全部成功 要么全部失败 1 2 本地事务 在计算机系统中 更多的是通过关系型数据库来控制事务 这是利用数据库本身的事务特性来实现的 因此叫数据库
  • 库存系统难破题?且看京东到家如何破

    京东到家库存系统架构设计 目前 京东到家库存系统经历两年多的线上考验与技术迭代 现服务着万级商家十万级店铺的规模 需求的变更与技术演进 我们是如何做到系统的稳定性与高可用呢 下面将会给你揭晓答案 库存系统技术架构图 上图如果进行总结下 主要
  • Encode and Decode TinyURL

    TinyURL is a URL shortening service where you enter a URL such as https leetcode com problems design tinyurl and it retu
  • 什么是全量表,增量表,快照表,拉链表?

    这一篇文章我们的目的是搞懂这四种表的概念 闲话不多说 直接看文字 全量表 全量表没有分区 表中的数据是前一天的所有数据 比如说今天是24号 那么全量表里面拥有的数据是23号的所有数据 每次往全量表里面写数据都会覆盖之前的数据 所以全量表不能
  • 数据仓库建模方法与建模案例

    1 数据仓库建模的目的是什么 2 常见的数据建模方法有哪些 3 常见的建模工具有哪些 1 数据仓库建模的目的 为什么要进行数据仓库建模 大数据的数仓建模是通过建模的方法更好的组织 存储数据 以便在 性能 成本 效率和数据质量之间找到最佳平衡
  • 数仓建设-架构&建模

    目录 一 架构篇 1 1 企业架构 1 2 数据平台架构 二 建模篇 2 1 FS LDM 2 2 数据模型概念 2 2 1 概念 2 2 2 数据模型三要素 2 2 3 数据模型分类 以旅客身份识别为例 2 3 维度建模工作过程 2 3
  • java枚举的集中管理

    java枚举的集中管理 一 产品中遇到的实际情况 枚举类泛滥 这个 这个 这个 这个 在 JDK 1 5 之前没有枚举类型 那时候一般用接口常量来替代 而使用 Java 枚举类型 enum 可以更贴近地表示这种常量 但是在项目中 就变成这样
  • RPC:时钟轮解决定时任务以及超时检测

    定时任务带来了什么问题 我们来看一下RPC框架是如何处理超时请求的 RPC中 无论是同步调用还是异步调用 调用端内部实行的都是异步 调用端在向服务端发送消息之前会创建一个Future 并存储这个消息标识与这个Future的映射 当服务端收到
  • 高性能Spark作业调优

    在大数据计算领域 Spark已经成为了越来越流行 越来越受欢迎的计算平台之一 Spark的功能涵盖了大数据领域的离线批处理 SQL类处理 流式 实时计算 机器学习 图计算等各种不同类型的计算操作 应用范围与前景非常广泛 在美团点评 已经有很
  • SaaS 系统完全开源介绍

    平台简介 芋道 以开发者为中心 打造中国第一流的快速开发平台 全部开源 个人与企业可 100 免费使用 架构图 管理后台的 Vue3 版本采用 vue element plus admin Vue2 版本采用 vue element adm
  • 数据仓库主题九-(事务事实表)

    事务事实表 对于单事务事实表 一个业务过程建立一个事实表 只反映一个业务过程的事实 对于多事务事实表 在同一个事实表中反映多个业务过程 多个业务过程是否放到同一个事实表中 订单作为交易行为的核心载体 直接反应了交易的状况 订单的流转回产生很
  • 如何设计一个数据库

    前言 我们知道 软件工程是为了解决软件危机的 它是采用工程的概念 原理 技术和方法来开发与维护软件 把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来 在软件开发的过程中 数据库设计是非常重要的 它需要根据需求分析设抽
  • 升级log4j2遇到的那些坑

    升级log4j2遇到的那些坑
  • 基于Hive数据仓库的标签画像实战

    Hive数据仓库 建立用户画像首先需要建立数据仓库 用于存储用户标签数据 Hive是基于Hadoop的数据仓库工具 依赖于HDFS存储数据 提供的SQL语言可以查询存储在HDFS中的数据 开发时一般使用Hive作为数据仓库 存储标签和用户特
  • 京东到家技术解密

    京东到家技术解密 京东到家相信很多人都听过 是一个短短两年内依靠技术与产品崛起的公司 其中项目的划分 技术的选型又是怎么样子呢 本课程目标用户群体是工作过几年的攻城狮 在项目中取得了一定的成就 但是缺少O2O 电商 新零售领域的工作经验 却
  • 阿里大数据之路:数据模型篇大总结

    第1章 大数据领域建模综 1 1 为什么需要数据建模 有结构地分类组织和存储是我们面临的一个挑战 数据模型强调从业务 数据存取和使用角度合理存储数据 数据模型方法 以便在性能 成本 效率之间取得最佳平衡 成本 良好的数据模型能极大地减少不必
  • 大数据开发:数仓建模常见数据模型

    在数据仓库搭建的过程当中 根据需求合理地选择数据模型 是非常关键的一个环节 对于数仓建模 很多人说不就是建表吗 哪有那么复杂 事实上 这是非常错误的思想 今天的大数据开发分享 我们来聊聊数仓建模常见的几种数据模型 目前来说 市场上主流的数据
  • 带你认识一下“京东到家-网关系统”

    京东到家三周年活动已然结束 在这2年里 我们的网关系统经历过了618 1020 双11 双12 415等多个非常有意义的考试 回顾起来依旧让人觉得很刺激 每次考前我们和市场部都做了大量的效果预估 压测 扩容 但是活动当日依旧是惊心动魄 瞬时
  • 第四讲 系统建模方法

    系统建模一般流程 实际系统的分析方法大致类似 但对于实际系统的模型实现方式则有多种 1 面向方程 图框 的因果建模 基于图框进行系统模型实现 的软件很多 如Simulink AMESim 应用于控制领域 等 2 面向对象 非因果 的物理建模
  • 模型调参之网格搜索与随机搜索

    模型调参之网格搜索与随机搜索 网格搜索法 GridSearchCV GridSearchCV GridSearchCV可以拆分成GridSearch和CV两部分 即网格搜素和交叉验证 GridSearch系统地遍历多种参数组合 通过交叉验证

随机推荐

  • SpringBoot学习之单点登录

    SpringBoot学习之单点登录 单点登录 登录 注销 部署 实现 主要功能 重要步骤 sso client拦截未登录请求 sso server拦截未登录请求 sso server验证用户登录信息 sso server创建授权令牌 sso
  • 直播运营岗

    一 理论知识 直播基础知识 直播团队构成 直播工作流程 中控工作流程 中控话术 二 界面操作 电商罗盘 巨量百应 直播伴侣 发单打单 产品链接 三 进阶学习 千川投放 直播复盘 四 面试规划 简历制作 职业生涯规划 1 直播基础知识 1 1
  • 银河麒麟桌面操作系统安装 postgreSQL13(源码安装)

    1 首先下载源码postgres wget http ftp postgresql org pub source v13 1 postgresql 13 1 tar bz2 2 解压 tar xjvf postgresql 13 1 tar
  • visual studio 2017 installer 安装包制作过程出现的问题---无法注册模块 HRESULT -2147024769 请与您的技术支持人员联系...

    使用visual studio 2017 installer制作打包程序时如果用到了外部控件需要按以下方式操作 1 将应用程序及应用程序所用到的所有DLL拷贝到打包目录 加入打包程序之中 2 将应用程序的XXX dll或XXX ocx的Re
  • STM32 C++编程系列一:STM32 C++编程介绍

    一 STM32及其他单片机开发现状 在目前绝大部分的单片机开发当中 C语言占据着主流的地位 但由于C语言本身是一种面向过程的语言 因此在当前利用面向对象思想构建可复用代码为主流的今天显得比较麻烦 很多人写单片机程序时都会遇到一个问题 明明写
  • 大数据采集概述

    文章目录 大数据采集概述 1 互联网大数据与采集 1 1互联网大数据来源 1 社交媒体 2 社交网络 3 百科知识库 4 新闻网站 5 评论信息 6 位置型信息 1 2 互联网大数据的特征 1 大数据类型和语义更加丰富 2 数据的规范化程度
  • 内存溢出问题解决思路

    内存溢出问题解决 一 常规解决思路 首先 在JVM参数配置时需要配置内存溢出后dump出内存的快照来 配置如下 XX HeapDumpOnOutOfMemoryError XX HeapDumpPath 内存快照 hprof输出路径 然后
  • 理解Java类加载的步骤

    前言 与在编译时需要进行 连接 工作的语言不同 在Java语言里 类的加载 连接 初始化过程都是在程序运行期间完成的 这种策略虽然牺牲了一小部分性能 但是大大增加了Java的灵活性 Java里天生可以动态拓展的语言特性就是依赖运行期动态加载
  • Linux线程同步(二)---互斥锁实现线程同步

    一 why 先给自己打个广告 本人的微信公众号 嵌入式Linux江湖 主要关注嵌入式软件开发 股票基金定投 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 在博客 Linux线程同步 一 初识篇 中 介绍了为
  • 基于STM32F407的人脸追踪

    整体概述 本项目采用两个舵机构成的二自由度的电动云台作为执行机构 控制摄像头在水平和垂直方向的运动 舵机带动摄像头进行二维平面的运动的同时 摄像头进行实时人脸检测 一旦检测到人脸 则进行人脸跟踪 摄像头采用星瞳openMV H7 主控采用的
  • (C语言)打印菱形图案 (15分)

    本题要求编写程序 打印一个高度为n的 由 组成的正菱形图案 输入格式 输入在一行中给出一个正的奇数n 输出格式 输出由n行星号 组成的菱形 如样例所示 每个星号后跟一个空格 输入样例 7 输出样例 通过点 模拟 include
  • EM算法估计beta混合模型参数

    1 用 network memerisation 造成的 clean noisy 数据 loss 差异来区分 clean noisy data 当得到一批数据的 normalised loss l i 0
  • android 填充,Android Drawable部分填充

    是的 如果您使用Layer List并定义重叠的项目 则是可能的 这是一个例子 android height 30dp gt android height 30dp gt 您可能需要尝试这些值 并根据需要进行调整 编辑 我认为您无法指定相对
  • MATLAB 添加自有的工具包

    我们经常会用到一些专业的MATLAB工具包 这些工具包下载好后应该如何添加呢 下面简单介绍 1 在命令行中敲入 pathtool 启动 设置路径 窗口 如下图所示 2 根据自己的需求 选择 添加文件夹 或者 添加并包含子文件夹 然后选择自己
  • linux 串口调试助手,COMTool: Cross platform Serial Assistant ( 跨平台 串口 调试 助手 串口助手 串口调试助手 linux windows mac R...

    COMTool A cross platform serial debug tools written by python Windows Linux Elementry OS Raspberry Pi3 screenshot shows
  • Mediapipe+OpenCV图像识别技术与Unity引擎的结合-Part2

    前言 之前写了一篇文章 Mediapipe OpenCV图像识别技术与Unity引擎的结合 其中的技术是Python利用OpenCV图像捕捉 配合强大的Mediapipe库来实现人体动作检测与识别 将识别结果实时同步至Unity中 实现人物
  • 开机出现文件windows root\system32\ntoskrnl.exe的另类解决办法

    一般的复制文件方法就不说了 我的这个是因为拷贝ntoskrnl exe还提示错误的解决办法 发生这种问 题主要可能有以下原因 Boot ini 文件的 Boot Loader 部分中的 Default 值丢失或无效 Ntoskrnl exe
  • JavaScript之变量和类型

    变量和类型 用处 1 让代码可以重复使用 重用性 2 修改代码方便 灵活 灵活性 1 上面 i love you 要写4次 2 把 love 改成 hate 要写4次 改成使用变量
  • 解决Windows因D3DCompiler_47.dll文件找不到等问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个D3DCompiler 47 dll文件进行安装
  • 基于RBAC模型的权限设计思路

    一 RBAC模型 进行设计前 最好能够理解技术模型 在业界接受度较高的功能权限模型是RBAC Role Based Access Control 模型 其基本理念是将 角色 这个概念赋予用户 在系统中用户与权限之间通过角色进行关联 以这样的