手撸一套RBAC权限系统

2023-11-10

文章来源:《RBAC权限系统分析、设计与实现》 | shuwoom.com

目前,使用最普遍的权限管理模型正是RBAC(Role-Based Access Control)模型,这篇文章也主要是介绍基于RBAC的权限管理系统,我会从RBAC是什么、如何设计RBAC两部分来介绍。

一、RBAC是什么

1、RBAC模型概述

RBAC模型(Role-Based Access Control:基于角色的访问控制)模型是20世纪90年代研究出来的一种新模型,但其实在20世纪70年代的多用户计算时期,这种思想就已经被提出来,直到20世纪90年代中后期,RBAC才在研究团体中得到一些重视,并先后提出了许多类型的RBAC模型。其中以美国George Mason大学信息安全技术实验室(LIST)提出的RBAC96模型最具有代表,并得到了普遍的公认。

RBAC认为权限授权的过程可以抽象地概括为:Who是否可以对What进行How的访问操作,并对这个逻辑表达式进行判断是否为True的求解过程,也即是将权限问题转换为What、How的问题,Who、What、How构成了访问权限三元组,具体的理论可以参考RBAC96的论文,这里我们就不做详细的展开介绍,大家有个印象即可。

2、RBAC的组成

在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。

RBAC通过定义角色的权限,并对用户授予某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型),极大地方便了权限的管理

下面在讲解之前,先介绍一些名词:

  • User(用户):每个用户都有唯一的UID识别,并被授予不同的角色

  • Role(角色):不同角色具有不同的权限

  • Permission(权限):访问权限

  • 用户-角色映射:用户和角色之间的映射关系

  • 角色-权限映射:角色和权限之间的映射

它们之间的关系如下图所示:

图片

例如下图,管理员和普通用户被授予不同的权限,普通用户只能去修改和查看个人信息,而不能创建创建用户和冻结用户,而管理员由于被授 予所有权限,所以可以做所有操作。

例如下图,管理员和普通用户被授予不同的权限,普通用户只能去修改和查看个人信息,而不能创建创建用户和冻结用户,而管理员由于被授予所有权限,所以可以做所有操作。

图片

3、RBAC支持的安全原则

RBAC支持三个著名的安全原则:最小权限原则、责任分离原则和数据抽象原则

  • 最小权限原则:RBAC可以将角色配置成其完成任务所需的最小权限集合

  • 责任分离原则:可以通过调用相互独立互斥的角色来共同完成敏感的任务,例如要求一个计账员和财务管理员共同参与统一过账操作

  • 数据抽象原则:可以通过权限的抽象来体现,例如财务操作用借款、存款等抽象权限,而不是使用典型的读、写、执行权限

4、RBAC的优缺点

(1)优点:

  • 简化了用户和权限的关系

  • 易扩展、易维护

(2)缺点:

  • RBAC模型没有提供操作顺序的控制机制,这一缺陷使得RBAC模型很难适应那些对操作次序有严格要求的系统

5、RBAC的3种模型

(1)RBAC0

RBAC0,是最简单、最原始的实现方式,也是其他RBAC模型的基础。

图片

在该模型中,用户和角色之间可以是多对多的关系,即一个用户在不同场景下是可以有不同的角色,例如:项目经理也可能是组长也可能是架构师。同时每个角色都至少有一个权限。这种模型下,用户和权限被分离独立开来,使得权限的授权认证更加灵活。

(2)RBAC1

基于RBAC0模型,引入了角色间的继承关系,即角色上有了上下级的区别。

图片

角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构,实现角色间的单继承。

这种模型适合于角色之间层次分明,可以给角色分组分层。

(3)RBAC2

RBAC2,基于RBAC0模型的基础上,进行了角色的访问控制。

图片

RBAC2中的一个基本限制是互斥角色的限制,互斥角色是指各自权限可以互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。

该模型有以下几种约束:

  • 互斥角色 :同一用户只能分配到一组互斥角色集合中至多一个角色,支持责任分离的原则。互斥角色是指各自权限互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。常举的例子:在审计活动中,一个角色不能同时被指派给会计角色和审计员角色。

  • 基数约束 :一个角色被分配的用户数量受限;一个用户可拥有的角色数目受限;同样一个角色对应的访问权限数目也应受限,以控制高级权限在系统中的分配。例如公司的领导人有限的;

  • 先决条件角色 :可以分配角色给用户仅当该用户已经是另一角色的成员;对应的可以分配访问权限给角色,仅当该角色已经拥有另一种访问权限。指要想获得较高的权限,要首先拥有低一级的权限。就像我们生活中,国家主席是从副主席中选举的一样。

  • 运行时互斥 :例如,允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色。

二、如何设计RBAC

这一节,我会介绍设计基于RBAC模型的权限系统的功能模块组成、流程以及数据库的设计。

1、RBAC的功能模块

图片

2、RBAC执行流程

图片

3、RBAC数据库设计

在这里插入图片描述

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

手撸一套RBAC权限系统 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 因为计算机丢失vcruntime140.dll如何修复,教你如何快速修复

    前几天 我在使用电脑时遇到了一个棘手的问题 我的电脑上的一个程序 软件名称 突然无法运行 提示我缺少vcruntime140 dll文件 这让我感到非常烦恼 因为我并不清楚如何解决这个问题 在经过一番尝试和搜索后 我终于找到了解决方法 并成
  • 已适配互联网上90%网站的油猴脚本,只能说非常好用

    相信很多朋友都担心上网时需要频繁点击下一页 不仅需要移动鼠标还浪费加载时间 如果能把这类网站的翻页方式全部变成瀑布 只需滑动鼠标滚轮就能自动切换页面岂不是很好 安排 今儿这个油猴脚本能让你深感神奇 其实Morley上个月在一个软件集锦里把这
  • 日常生活57种排毒食物大盘点

    日常生活57种排毒食物大盘点 食品添加剂 高脂肪食物 杀虫剂 空气中的有毒排放物 越来越多的毒素充斥着我们的生活 痤疮 口臭 便秘 头疼 水肿 肥胖 这些都是体内毒素积聚的信号 于是偶跟风搜集了很多排毒的方法 食物 注意事项 拿出来与大家分
  • mysql常见的存储引擎有哪些?

    MySQL中常用的四种存储引擎分别是 MyISAM InnoDB MEMORY ARCHIVE MySQL 5 5版本后默认的存储引擎为InnoDB InnoDB存储引擎 InnoDB是MySQL默认的事务型存储引擎 使用最广泛 基于聚簇索
  • uni-app小白【h5,vue,小程序的区别】

    uni app 传统的h5只有一端 就是浏览器 但是uni app可以横跨7端 虽然它还是前端 但与传统的h5有明显的区别 网络模型的变化 以前的网络大多都是b s 服务端代码混合在页面里 现在是C S前后端分离 通过js api 类似aj
  • ChatGPT时代,如何训练大脑,以后不会被人工智能取代

    nbsp 当有一天 你的小孩子问我将来会不会被AI代替的时候 为人父母的我们应该怎么回答小孩子的问题呢 不知各位是否刷到一位名为浅爸谈英语的博主爸爸分享与他女儿关于AI对话的视频 这段对话很有启发性 父亲的回答也很中肯 可以通过这段对话探讨
  • 元宇宙背后,你应该了解的人工智能核心技术

    原创 王稳钺 资料来源 单博 一 真假元宇宙 最近元宇宙这个概念非常火 网上的资料也是铺天盖地 但个人认为元宇宙这个概念里蹭热点的人非常的多 元宇宙还是处于概念为主的阶段 很多人说自己在做元宇宙 但其实都是真假难辨的状态 在元宇宙这个词出现
  • 商标45类分类表明细表_2019版注册商标分类表,商标注册45类范围明细

    注册商标的时候都是要确定具体的产品或服务的 目前我国商标分类是用 类似商品和服务区分表 基于尼斯分类第十一版 2019年版这本分类书 这本分类表也是全球通用的分类表 商标分类总共有45个类别 1 34类是产品类 35 45类是服务类 这45
  • [SecureCRT]Public Key Authentication Failed

    取消勾选PublicKey
  • ABB工业机器人程序编写与实战

    任务 实现物件从一个位置移动到另一个位置 1 补充的知识点 1 1ABB工业机器人编程语言PAPID 任务 程序模块 系统模块 例行程序 PP指针 机器人运动指令 MoveJ ToPoint Speed Zone Tool Wobj Mov
  • 经验误差与过拟合

    一 经验误差 一般在分类问题中 我们把分类错误的样本数占样本总数的比例称作 错误率 即如果在m个样本中有a个样本分类错误 则错误率为E a m 则相对的 1 E称为精度 即精度 1 错误率 更一般的 我们把学习器的实际预测输出与样本的真实输
  • 微信小程序实战项目

    基于微信小程序的在线商城点单系统 前言 闲来无事 想以后自己开一个小超市或者小吃店 能够支持线上下单 既方便客户也方便自己 系统采用C 语言作为后端实现与小程序的交互 给用来学习或者想自己开个小店的朋友当个参考 文末获取源码联系 精彩专栏持
  • 一文弄懂Numpy中ndarray的维度(dimension)/轴数(axis/axes)问题

    Numpy库的核心是ndarray 实际上就是N维数组 N dimensional array 关于这个数据对象的详细介绍 参考官方文档最为合适 有一点要注意的是 ndarray的内置方法只有30多个 常用的如求平均值可以写a mean 但
  • 视觉SLAM漫谈(二):图优化理论与g2o的使用

    视觉SLAM漫谈 二 图优化理论与g2o的使用 1 前言以及回顾 各位朋友 自从上一篇 视觉SLAM漫谈 写成以来已经有一段时间了 我收到几位热心读者的邮件 有的希望我介绍一下当前视觉SLAM程序的实用程度 更多的人希望了解一下前文提到的g
  • Java知识点概览

    Java 基础 说说自定义注解的场景及实现 利用自定义注解 结合SpringAOP可以完成权限控制 日志记录 统一异常处理 数字签名 数据加解密等功能 实现场景 API接口数据加解密 1 自定义一个注解 在需要加解密的方法上添加该注解 2
  • 树形结构数据构建算法

    在一些前端开发过程中 我们通常需要将后台查询出来的集合数据进行相应的转换 转成树形结构对象 比如常用的评论区数据就是一种典型的树形结构数据 如下图所示 而后台服务端传来的数据通常是一种普通的集合 元素中有 id 和 pid 以此构成 父子节
  • 程序员计算器

    程序员计算器 这是我们WIN7系统下的程序员的模式 你可以使用不同的进制来表示数 也可以限定数据的字节长度 而且每个数都在下方给出了其二进制的值 非常贴心 所谓程序员计算器 除了这些 还包括各种位运算 下面一一介绍 And Or Not X
  • vue项目如何解决跨域问题

    1 什么是跨域 1 跨域指的是浏览器不能执行其他网站的脚本 它是由浏览器的同源策略造成的 是浏览器施加的安全限制 2 浏览器执行javascript脚本时 会检查这个脚本属于哪个页面 如果不是同源页面 就不会被执行 3 比如你在www 垃圾
  • window10安装MySQL数据库

    准备好软件 MySql的下载参考 1137条消息 mysql下载与安装过程 weixin 40396510的博客 CSDN博客 mysql数据库下载安装 1137条消息 安装MySQL的常见问题 二木成林的博客 CSDN博客 sc不是内部或
  • 手撸一套RBAC权限系统

    文章来源 RBAC权限系统分析 设计与实现 shuwoom com 目前 使用最普遍的权限管理模型正是RBAC Role Based Access Control 模型 这篇文章也主要是介绍基于RBAC的权限管理系统 我会从RBAC是什么