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权限模型 的相关文章

  • 设计模式——Visitor(访问者)模式

    目录 前言 1 定义 2 适用性 3 结构 3 1 结构图 3 2 参与者 4 Java实际应用举例 以ASM技术为例 4 1 被访问对象 ClassReader 4 2 Visitor ClassVisitor 4 3 具体visitor
  • 面向过程和面向对象的语言有哪些,以及优缺点(一篇文章让你理解)

    C语言是面向过程的 而C python java是面向对象的 面向过程的编程思想将一个功能分解为一 个一个小的步骤 我们通过完成一个一 个的小的步骤来完成一个程序 优点 这种编程方式 符合我们人类的思维 编写起来相对比较简单 缺点 但是这种
  • java需会(转载)

    一 基础篇 1 1 Java基础 面向对象的特征 继承 封装和多态 final finally finalize 的区别 Exception Error 运行时异常与一般异常有何异同 请写出5种常见到的runtime exception i
  • 设计模式--组合模式

    组合模式 又叫部分整体模式 属于结构型模式 基本原理 以树形的结构将相似的对象组合起来 主要流程 1 创建对象 2 在对象中设置用来存放下一级相似对象的数据结构 3 在对象中设置增删改查等功能 注意 这种模式和数据结构中的树形结构相似 in
  • C++设计模式-State状态模式

    State状态模式作用 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 UML图如下 State类 抽象状态类 定义一个接口以封装与Context的一个特定状态相关的行为 ConcreteState类 具体状态 每一
  • 行为型模式-状态模式

    package per mjn pattern state after 环境角色类 public class Context 定义对应状态对象的常量 public final static OpeningState OPENING STAT
  • 设计模式一之简单工厂模式

    生活示例 刻板印刷 gt 活字印刷举例 喝酒唱歌 人生真爽 gt 对酒当歌 人生几何 可维护 需要修改 则只需要改需要改的字即可 可复用 字体可在后来的印刷复用 可扩展 需要加字 只需要加入相应的刻字即可 灵活性好 字的排列可能竖排或横排
  • 设计模式-建造者模式

    文章目录 建造者模式 创建复杂对象的优雅方式 什么是建造者模式 建造者模式的使用场景 优缺点 示例 使用建造者模式创建电脑对象 建造者模式 创建复杂对象的优雅方式 在软件开发中 有时候我们需要创建具有复杂结构和多个组件的对象 直接在客户端代
  • 第12课:生活中的构建模式——想要车还是庄园

    用程序来模拟生活 从剧情中思考构建模式 与工厂模式的区别 与组合模式的区别 构建模式的模型抽象 类图 基于升级版的实现 模型说明 应用场景 故事剧情 下周就要过年了 这是 Tony 工作后的第一个春节 还是在离家这么远的北京工作 所以肯定不
  • 每日一问:你想如何破坏单例模式?

    前言 1 单例是什么 单例模式 是一种创建型设计模式 目的是保证全局一个类只有一个实例对象 分为懒汉式和饿汉式 所谓懒汉式 类似于懒加载 需要的时候才会触发初始化实例对象 而饿汉式正好相反 项目启动 类加载的时候 就会创建初始化单例对象 1
  • linux内核中的设计模式

    创建型 Object Pool Object Pool模式可以提升性能 尤其是在对象的分配 初始化成本高 使用频率高 但使用时间短的情况下 对象池可以设置对象池的大小和回收时间缓存预分配的对象 NT和Linux都有简单的预分配缓存对象的机制
  • [设计模式]模板方法模式(Template Method)

    1 意图 定义一个操作中的算法的骨架 而将一些步骤延迟到子类中 TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 2 动机 其实就是如意图所描述的 算法的骨架是一样的 就是有些特殊步骤不一样 就可以
  • 程序员必知的23种设计模式之组合模式

    文章目录 1 模式引出 学校院系展示需求 1 1 传统方案 1 2 传统方案问题分析 2 组合模式基本介绍 2 1 方案修改 3 组合模式解决的问题 4 组合模式的注意事项和细节 1 模式引出 学校院系展示需求 编写程序展示一个学校院系结构
  • 【设计模式】工厂模式(Factory Pattern)

    1 概述 工厂模式 Factory Pattern 是最常用的设计模式之一 它属于创建类型的设计模式 它提供了一种创建对象的最佳方式 在工厂模式中 我们在创建对象时不会对客户端暴露创建逻辑 并且是通过一个共同的接口来指向新创建的对象 工厂模
  • 设计模式(不懂)

    面试中经常问到设计模式 我才对这个东西了解了一下 才发现他是没有开发的新大陆 是oo设计的更高级别 能把设计模式搞懂 那oo你就搞的差不多了 随便看了还是很有意思的 虽然不怎么懂 百科名片 相关书籍 设计模式 Design pattern
  • 设计模式—迭代器模式解析

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

    作者主页 欢迎来到我的技术博客 个人介绍 大家好 本人热衷于 Java后端开发 欢迎来交流学习哦 如果文章对您有帮助 记得 关注 点赞 收藏 评论 您的支持将是我创作的动力 让我们一起加油进步吧 文章目录 一 模板方法模式的定义 二 模板方
  • 设计模式(三)-结构型模式(4)-组合模式

    一 为何需要组合模式 Composite 在代码设计中 有种情况是对象之间存在层次关系 即对象之间会存在父结点和子结点的关系 比如在文件管理系统中 所有文件和文件夹形成树状结构 文件夹目录里存在子文件夹和文件 文件夹属于枝结点 文件属于叶结
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • 【设计模式之美】理论一:怎么才算是单一原则、如何取舍单一原则

    文章目录 一 如何判断类的职责是否足够单一 二 类的职责是否设计得越单一越好 开始学习一些经典的设计原则 其中包括 SOLID KISS YAGNI DRY LOD 等 本文主要学习单一职责原则的相关内容 单一职责原则的定义 一个类只负责完

随机推荐

  • 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权限模型

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