RBAC权限模型

2023-11-15

权限

权限,是用户可以访问的资源。包括页面权限、操作权限和数据权限。

  1. 页面权限
    页面权限,即用户登录系统可以看到的页面。由菜单控制。菜单包括一级菜单、二级菜单,只有用户有一级菜单、二级菜单的权限,那么用户就可以访问页面。
  2. 操作权限
    操作权限,即页面的功能按钮,包括查看、新增、修改和删除等。比如,用户点击删除按钮时,后台会校验用户角色下的所有权限是否包含该删除权限,如果包含,则可进行下一步操作,反之,提示无权操作。
  3. 数据权限
    数据权限,即不同用户在同一页面看到的数据是不同的。比如,财务部只能看到财务部的数据,采购部只能看到采购部的数据。解决方案一般是将数据和具体的组织结构关联起来。
    传统权限模型 传统权限模型,直接将权限赋予用户。

RBAC权限模型

RBAC(Role Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联,而不是直接将权限赋予用户。

一个用户拥有若干个角色,每个角色拥有若干个权限,这样就构成了“用户-角色-权限”的授权模型。这种授权模型的好处在于,不必每次创建用户时都进行权限分配的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,减少频繁设置。

RBAC模型中,用户与角色之间、角色与权限之间,一般是多对多的关系。

所谓“多对多”,就是双向的一对多。
在这里插入图片描述
单向的一对多
单向的一对多。比如,客户表和订单表。一个客户名下有多个订单。
在这里插入图片描述
双向的一对多(多对多)
多对多,即双向的一对多。比如,学生表和课程表。一个学生可以选修多门课程。一门课程有多个学生选修。
在这里插入图片描述

RBAC级别

  1. RBAC0。用户和角色是多对多,角色和权限是多对多。一个用户拥有的权限,是他所有角色的集合。
  2. RBAC1。基于RBAC0,并引入了角色分层的概念,即一个角色分为多个等级,每个等级对应的权限是不一样的。把权限分给用户时,需要分到对应的角色等级。角色等级低时拥有的权限少,角色等级高的权限是所有角色等级低的权限的集合。
  3. RBAC2。基于RBAC1,对角色访问进行限制。如
    互斥角色限制。同一个用户分配到两个角色,且角色互斥时,那么系统应该提醒只能选择其中一个角色。比如员工拥有商务这个角色,可以创建结算单并提交给财务审核,这时,就不能赋予这个员工财务角色,否则他就自己提交结算自己审核结算单了。
    角色数量限制。一个用户拥有的角色数量是有限的;一个角色被分配的用户数量也是有限的。
    先决条件限制。用户想获得某个上级角色,必须先获得其下一级的角色。比如想获得产品总监的权限,那就需要从产品助理这一角色开始,再到产品经理角色,最后到产品总监角色。
  4. RBAC3。基于RBAC0,对RBAC1和RBAC2进行了整合,是最全面的权限管理。
    用户组
    当平台用户的基数增大,角色类型越来越多时,而且一部分人具有相同的属性,比如财务部的所有员工。

用户组

当平台用户的基数增大,角色类型越来越多时,而且一部分人具有相同的属性,比如财务部的所有员工。
如果直接给用户分配角色,管理员的工作量就会很大。
如果把相同属性的用户归类到某个用户组,那么管理员直接给用户组分配角色,用户组里的每个用户即可拥有对应的角色,以后其他用户加入用户组,便可自动获取用户组下的所有角色;用户退出用户组,则自动撤销用户组下的所有角色,无需管理员手动管理角色。

举例1:一个部门是一个用户组。
将部门和角色进行关联。当用户加入某个部门后,就自动获得该部门拥有的全部角色,不需要管理员手动授权,大大减少了工作量。同时,用户如果被调去其他部门,角色将自动调整。

举例2:一个岗位是一个用户组。
每个部门下会有很多岗位,比如财务部有财务总监、会计、出纳等岗位。这些岗位虽然同属财务部,但每个岗位的权限是不同的。职位高的拥有更多权限,总监拥有所有权限,会计、出纳拥有部分权限。特殊情况下,一个人可能身兼多职。

部门、岗位就是具有上下级关系的用户组。

权限框架

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

RBAC权限模型 的相关文章

  • c语言实现面向对象编程(const * ,* const)

    c语言实现面向对象编程 面向对象思想 封装 继承 多态 代码实现 函数签名及返回值的约定 const 重载 参考了onlyshi的博客代码 orz传送门 参考了嵌入式实践一些代码 这里就不加了 面向对象思想 面向对象编程 OOP 并不是一种
  • Java复习-25-单例设计模式

    单例设计模式 目的 使用场景 在实际开发下 会存在一种情况 某一种类在程序的整个生命周期中 只需要实例化一次就足够了 例如 系统数据类 由于操作系统只有一个 因此在程序初始化时该类只需要实例化一次 之后的系统数据更改都是在这一个实例化对象中
  • C++设计模式(8)——命令模式

    命令模式 亦称 动作 事务 Action Transaction Command 意图 命令模式是一种行为设计模式 它可将请求转换为一个包含与请求相关的所有信息的独立对象 该转换让你能根据不同的请求将方法参数化 延迟请求执行或将其放入队列中
  • 23种设计模式之装饰模式

    装饰模式 一个简陋的房子 它可以让人在里面居住 为人遮风避雨 但如果给它进行装修 那么它的居住环境就更加宜人了 程序中的对象也与房子十分类似 首先有一个相当于 房子 的对象 然后经过不断装饰 不断对其增加功能 它就变成了使用功能更加强大的对
  • 设计模式之(三)---工厂方法模式

    女娲补天的故事大家都听过吧 这个故事是说 女娲在补了天后 下到凡间一看 哇塞 风景太优美了 天空是湛 蓝的 水是清澈的 空气是清新的 太美丽了 然后就待时间长了就有点寂寞了 没有动物 这些看的到 都是静态的东西呀 怎么办 别忘了是神仙呀 没
  • C++ 装饰器模式

    什么是装饰器模式 装饰器模式是一种结构型设计模式 实现了在不改变现有对象结构的的同时又拓展了新的功能 装饰器本质上是对现有对象的重新包装 同时装饰器又称为封装器 如何理解装饰器模式 以笔记本电脑为例 当我们购买了一台新笔记本电脑 但我们发现
  • Java并发编程之设计模式

    同步模式之保护性暂停 1 定义 即 Guarded Suspension 用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程 让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线
  • 设计模式七大原则

    1 设计模式的目的 编写软件过程中 程序员面临着来自耦合性 内聚性以及可维护性 可扩展性 重用性 灵活性 等多方面的挑战 设计模式是为了让程序 软件 具有更好 1 代码重用性 即 相同功能的代码 不用多次编写 2 可读性 即 编程规范性 便
  • 设计模式(5)-适配器模式(Adapter Pattern)

    适配器模式 Adapter Pattern 顾名思义 就像变压器 转接头差不多 就像美国的生活电压是110V 中国是220V 就需要一个变压器将220V转换成110V 或者一个Type C接口想插如USB接口的东西 你就需要一个转换器 而这
  • 分享几个项目中用到的设计模式

    前言 之前项目中出于扩展性和有雅性的考虑 使用了多种设计模式进行项目框架的设计 主要的一些设计模式是单例模式 工厂模式 策略模式 责任链模式 代理模式这几种 现在依次讲讲这几个的主要是实现方式和在我们项目中的应用场景 核心设计模式分享 单例
  • HeadFirst 设计模式学习笔记10——MVC分析

    1 M V C Model View Controller 模式 视图 控制器 这是一种范型 模型对象正是应用系统存在的理由 你设计的对象 包含了数据 逻辑和其他在你的应用领域创建定制的类 视图通常是控件 用来显示和编辑 控制器位于二者中间
  • java-IO流(5)-IO流中的设计模式(装饰器模式和适配器模式)的介绍

    目录 1装饰器模式 1 1定义 1 2代码实现 1 3装饰器特点 1 4装饰器在IO流中的使用 2配适器模式 2 1Adapter适配器 2 2代码实例 2 3适配器特点 2 4适配器优缺点 2 5适配器在IO中的使用 3装饰器与适配器异同
  • 设计模式(2)

    2 2 结构型模式 结构型模式一共有七种 其中 适配器模式和装饰模式统称为包装模式 装饰模式和代理模式的类图基本相同 但目的不同 这些有相似目的或者有相似结构的模式需要对其概念辨析清楚 才能较好地掌握 下面将对结构型模式分别进行介绍 2 2
  • 设计模式—迭代器模式解析

    本文参考学习了 图解设计模式 中的代码实现和原理解释 迭代器模式 简介 Iterator 模式用于在数据集合中按照顺序遍历集合 就类似于我们的循环 一个个去遍历一个集合中的所有元素 示例代码 首先我们思考一个书本和书架的关系 显然 书架可以
  • 设计模式(3)--对象结构(5)--外观

    1 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口 这个接口使得 这一子系统更加容易使用 2 两种角色 子系统 Subsystem 外观 Facade 3 优点 3 1 对客户屏蔽了子系统组件 减少了客户处
  • 自动化测试面试题(附答案)

    1 自动化代码中 用到了哪些设计模式 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2 什么是断言 Assert 断言Assert用于在代码中验证实际结果是不是符合预期结果 如果测试用例执行失败会抛出异常并提供断
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • 自动化测试面试题(附答案)

    1 自动化代码中 用到了哪些设计模式 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2 什么是断言 Assert 断言Assert用于在代码中验证实际结果是不是符合预期结果 如果测试用例执行失败会抛出异常并提供断
  • 【设计模式之美】面向对象分析方法论与实现(二):需求到接口实现的方法论

    文章目录 一 进行面向对象设计 1 划分职责 gt 需要有哪些类 2 定义类及其属性和方法 3 定义类与类之间的交互关系 4 将类组装起来并提供执行入口 二 如何进行面向对象编程 1 接口实现
  • 【设计模式之美】 SOLID 原则之五:依赖反转原则:将代码执行流程交给框架

    文章目录 一 控制反转 IOC 二 依赖注入 DI 三 依赖注入框架 DI Framework 四 依赖反转原则 DIP 一 控制反转 IOC 通过一个例子来看一下 什么是控制反转 public class UserServiceTest

随机推荐

  • vue使用CSS插件scss时代码报红

    vue使用CSS插件scss时代码报红 问题描述 解决方案 1 打开设置 2 进入setting json文件修改 3 修改setting json文件 解决结果 问题描述 刚开始下载别人的代码 安装依赖运行起来后 样式引用没有问题 发现样
  • 华为OD机试 Python 最佳对手

    题目 在一个游戏中 队伍之间的对战要基于双方的实力来匹配 为了保证游戏体验 我们希望两支队伍的实力差别不超过一个上限值 现在 你将获得若干队伍的实力值 你的任务是进行队伍匹配 要求实力差最小且不超过上限 然后计算这些成功匹配的队伍间的实力差
  • 转:脱字符"^"的由来

    从事IT业二十多年 今年才知道 这个符号叫脱字符 由于最近在学Python的re正则表达式处理 就查了下这个名称的由来 转发如下 脱字符 就是说 在文章中 某个字 打漏了 打脱了 打落了 要在这个中间 把打落了 的字 插入进去 就是使用的这
  • css3设置背景图片的大小

    background size 设置背景图片的大小 以长度值或百分比显示 还可以通过cover和contain来对图片进行伸缩 语法 1 background size auto 默认值 不改变背景图片的高度和宽度 2 background
  • Eigen——问题:无法打开源文件Eigen/Dense,已解决

    刚刚开始准备按照官网的文档实验代码就出现了这个错误 surprise Solution 1 下载Eigen 并解压 1 CSDN http download csdn net download airaybaiju 10237226 2 官
  • 为什么电源中经常用肖特基二极管

    如下图为两个开关电源电路图 下面的二极管都是肖特基二极管 那么为什么电源中都是用肖特基二极管呢 主要有两个原因 1 肖特基二极管导通压降低 一般电源电流比较大 导通压降低意味着损失的功耗低 2 肖特基二极管响应时间快 一般开关电源是通过内部
  • 编程用for和while语句编写10以内相加的c语言程序,C语言循环结构程序设计

    内容详解 while语句 do while语句 for语句 循环嵌套 break和continue语句 实例展示 热身小练 打印6行6列的 矩阵 两个 之间用空格隔开 include int main for int i 1 i lt 6
  • Python-PyCrypto 下载

    python库 用于信息安全的 叫PyCrypto Linux https www dlitz net software pycrypto Windows http www voidspace org uk python modules s
  • VS2005(VC++)远程调试方法

    仅我目前了解很多人还在使用成本很高的本地调试方法 即在需要调试的机器上安装VS环境 这样的好处就是直接 但是成本很高 要在目标机器安装一个VS的Copy 国内可能不是问题 还有源代码安全问题 同步问题等等 开始 已知 A B两个服务器 如果
  • 代码规范及CodeReview要点

    为什么80 的码农都做不了架构师 gt gt gt 一 代码规范的要点 代码规范主要分为风格规范与设计规范两大类 1 代码风格规范 主要是文字上的规定 看似表面文章 实际上非常重要 具体有如下几个方面 1 缩进 2 行宽 3 断行 空白行
  • 单片机c51中断 — 中断键控流水灯

    项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第五章 中断 在第4章的实例2中 按键检测是采用查询法进行的 其流程图如图所示 问题是这样的 由于查询法 按键查询 标志位修改及彩灯循环几个环节是串联关系 当CPU运行于彩灯
  • java 远程从FTP服务器下载文件到本地

    package com cassiatwig liuliangqianbao util import org apache commons net ftp FTPClient import org apache commons net ft
  • HTTP慢速拒绝服务攻击(Slow HTTP Dos)

    HTTP慢速拒绝服务攻击简介 HTTP慢速攻击是利用HTTP合法机制 以极低的速度往服务器发送HTTP请求 尽量长时间保持连接 不释放 若是达到了Web Server对于并发连接数的上限 同时恶意占用的连接没有被释放 那么服务器端将无法接受
  • 如何c语言看字节大小,如何计算C语言结构占用的字节数

    全部展开 结构的数据类型很多 我们不会一long而就 让我们直接看一下相同数据结构的几种书写格式 格式一 01 struct tagPhone 02 03 char A 04 int B 05 short C 06 Phone 格式二 01
  • Matlab统计分析 -- 聚类算法模型

    统计分析 聚类算法模型 距离分析 数据标准化 欧氏距离与量纲有关 因此 有时需要对数据进行预处理 如标准化等 在MATLAB中的命令是zscore 调用格式 Z zscore X 输入X表示N行p列的原始观测矩阵 行为个体 列为指标 输出Z
  • vofuria的开发(4)更换目标图片(target)

    1 首先进入vuforia的官网 接下来的操作就很简单了 如下图中所示 这里如果你不是Unity开发就选择SDK下载 里面有一个 bat的文件一个 xml的文件 将文件放到将这两个文件放到 vuforia sdk Android sampl
  • [Error] invalid operands of types ‘int‘ and ‘double‘ to binary ‘operator%‘

    在运行下面的代码时 编译器报错 Error invalid operands of types int and double to binary operator include
  • SpringMvc ModelAndView 视图解析器和Servlet详解

    一 设置ModelAndView对象 根据View的名称 和视图解析器跳转到指定的页面 页面 视图解析器的前缀 view name 视图解析器的后缀
  • 前端Vue自定义顶部导航栏navBar 导航栏搜索框searchBar 导航栏右侧菜单按钮button

    随着技术的发展 开发的复杂度也越来越高 传统开发方式将一个系统做成了整块应用 经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改 造成牵一发而动全身 通过组件化开发 可以有效实现单独开发 单独维护 而且他们之间可以
  • RBAC权限模型

    权限 权限 是用户可以访问的资源 包括页面权限 操作权限和数据权限 页面权限 页面权限 即用户登录系统可以看到的页面 由菜单控制 菜单包括一级菜单 二级菜单 只有用户有一级菜单 二级菜单的权限 那么用户就可以访问页面 操作权限 操作权限 即