【权限模型】RBAC模型详解
大家好,我是jstart千语。今天给大家介绍一下鉴权模型RBAC,传统的鉴权模式就是基于用户和权限之间的多对多关系。而RBAC就更加的精准,更好管理。
RBAC介绍
RBAC(Role-Based Access Control)是一种通过角色(Role)关联用户(User)和权限(Permission)的访问控制模型,核心思想是:用户→角色→权限。
- 用户(User):系统的实际使用者,拥有唯一标识。
- 角色(Role):一组权限的集合,代表用户在系统中的职责(如管理员、普通用户)。
- 权限(Permission):对系统资源的操作许可(如 “用户查看”、“订单删除”)。
- 关联关系:
- 用户与角色:多对多(一个用户可拥有多个角色,一个角色可分配给多个用户)。
- 角色与权限:多对多(一个角色可包含多个权限,一个权限可被多个角色拥有)。
优点:
- 简化权限管理:通过角色统一管理权限,避免直接对用户逐个授权。
- 灵活性:新增角色或修改角色权限时,无需逐个调整用户,只需关联角色即可。
- 职责分离:符合现实中组织架构的职责划分(如财务角色、研发角色)。
库表设计
表名 | 作用 | 核心字段(主键、外键、索引) |
---|---|---|
sys_user | 用户表 | id (主键,自增)、username (唯一)、password 、email 等 |
sys_role | 角色表 | id (主键,自增)、role_name (唯一,如 ROLE_ADMIN)、description |
sys_permission | 权限表 | id (主键,自增)、permission_code (唯一,如 user:view)、permission_name 、type (菜单 / 操作权限) |
sys_user_role | 用户角色关联表 | user_id (外键,关联 sys_user.id)、role_id (外键,关联 sys_role.id) |
sys_role_permission | 角色权限关联表 | role_id (外键,关联 sys_role.id)、permission_id (外键,关联 sys_permission.id) |
DDL 语句(MySQL 示例)
-- 创建用户表
CREATE TABLE sys_user (id BIGINT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名',password VARCHAR(100) NOT NULL COMMENT '密码(加密后)',email VARCHAR(100) COMMENT '邮箱',create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB CHARSET=utf8mb4 COMMENT '用户表';-- 创建角色表
CREATE TABLE sys_role (id BIGINT AUTO_INCREMENT PRIMARY KEY,role_name VARCHAR(50) UNIQUE NOT NULL COMMENT '角色标识(如ROLE_ADMIN)',description VARCHAR(200) COMMENT '角色描述',create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB CHARSET=utf8mb4 COMMENT '角色表';-- 创建权限表(包含菜单和操作权限)
CREATE TABLE sys_permission (id BIGINT AUTO_INCREMENT PRIMARY KEY,permission_code VARCHAR(100) UNIQUE NOT NULL COMMENT '权限标识(如user:view、order:delete)',permission_name VARCHAR(50) NOT NULL COMMENT '权限名称',type TINYINT NOT NULL DEFAULT 0 COMMENT '类型:0=菜单权限,1=操作权限',create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB CHARSET=utf8mb4 COMMENT '权限表';-- 创建用户角色关联表
CREATE TABLE sys_user_role (user_id BIGINT NOT NULL COMMENT '用户ID',role_id BIGINT NOT NULL COMMENT '角色ID',PRIMARY KEY (user_id, role_id),FOREIGN KEY (user_id) REFERENCES sys_user(id) ON DELETE CASCADE,FOREIGN KEY (role_id) REFERENCES sys_role(id) ON DELETE CASCADE
) ENGINE=InnoDB CHARSET=utf8mb4 COMMENT '用户角色关联表';-- 创建角色权限关联表
CREATE TABLE sys_role_permission (role_id BIGINT NOT NULL COMMENT '角色ID',permission_id BIGINT NOT NULL COMMENT '权限ID',PRIMARY KEY (role_id, permission_id),FOREIGN KEY (role_id) REFERENCES sys_role(id) ON DELETE CASCADE,FOREIGN KEY (permission_id) REFERENCES sys_permission(id) ON DELETE CASCADE
) ENGINE=InnoDB CHARSET=utf8mb4 COMMENT '角色权限关联表';
扩展
RBAC - 1
RBAC - 1 在基本 RBAC 模型的基础上引入了角色层次结构的概念。即一个角色可以继承另一个角色的权限,形成类似于树状或有向无环图(DAG)的结构。例如,“高级管理员” 角色可能继承 “普通管理员” 角色的所有权限,并且还拥有额外的权限。这种层次结构使得权限管理更加灵活和高效,能够更好地反映现实组织中的职责和权力关系。
优势
- 当一个新角色需要继承已有角色的大部分权限时,只需将其置于角色层次结构中合适的位置,而无需重新分配所有权限。
- 角色层次结构可以确保权限的分配遵循一定的规则和逻辑,减少了权限分配的混乱和错误。
- 能够准确地反映组织中不同职位之间的上下级关系和权限继承关系。
RBAC - 2(约束型 RBAC)
RBAC - 2 在基本 RBAC 模型基础上,添加了各种约束条件,以增强系统的安全性和合规性。这些约束可以限制用户、角色和权限之间的关系,防止不合理的权限分配和使用。
常见约束类型:
- 互斥角色约束:某些角色不能同时被一个用户拥有。例如,在财务系统中,“审计员” 和 “财务管理员” 角色是互斥的,因为一个人不能同时既负责审计又负责财务管理,以防止利益冲突和欺诈行为。
- 基数约束:对用户可拥有的角色数量、角色可分配的用户数量或权限可分配的角色数量进行限制。例如,规定每个项目只能有一个 “项目经理” 角色。
- 先决条件约束:一个角色必须在用户拥有另一个角色之后才能被分配。比如,用户必须先拥有 “普通员工” 角色,才能被分配 “部门主管” 角色。
优势
- 增强安全性:约束条件可以有效防止用户滥用权限,减少内部人员违规操作的风险。
- 满足合规要求:许多行业有严格的法规和合规要求,RBAC - 2 的约束机制有助于系统满足这些要求,如金融行业的监管要求。
- 提高系统可靠性:通过约束条件,可以避免不合理的权限分配导致的系统故障和数据不一致问题。
相关文章:
【权限模型】RBAC模型详解
大家好,我是jstart千语。今天给大家介绍一下鉴权模型RBAC,传统的鉴权模式就是基于用户和权限之间的多对多关系。而RBAC就更加的精准,更好管理。 RBAC介绍 RBAC(Role-Based Access Control)是一种通过角色(…...
tree命令
tree [选项] [目录...] 指定要显示的目录。如果没有指定目录,tree 会显示当前目录及其子目录结构。 常用选项 -a 显示所有文件和目录,包括隐藏文件(以 . 开头的文件)。 -d 只显示目录,不显示文件。 -L LEVEL …...
【Vue.js】组件数据通信:基于Props 实现父组件→子组件传递数据(最基础案例)
概览 前言父子通信流程关键技术点关键规则 实战1. 在父组件中注册子组件2. 子组件接收父组件传入的数据补充与总结 前言 在 Vue 3 中,父组件向子组件传递数据是通过props实现的。父组件在子组件的标签上绑定数据,子组件通过定义props接收这些数据。这种…...
信创时代技术栈选择与前景分析:国产替代背景下的战略路径与实践指南
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
Python内置方法干货总结
如果你还在为提升Python代码能力发愁,那么掌握内置方法就是你的捷径!很多初学者和进阶者忽略了这一“宝藏”,其实,Python的内置方法不仅能让你代码更简洁,还能大幅提升开发效率。今天,咱们就来一次系统梳理…...
小草GrassRouter多卡聚合路由器聚合卫星、MESH网络应用解决方案
一、多网融合解决方案 卫星网络融合 支持接入卫星通信模块,在无地面网络覆盖的极端场景(如偏远山区、海洋救援)下,形成“5G卫星”双链路冗余传输,卫星链路可作为核心通信备份,确保关键指令和视频数据实…...
Spring反射机制
Spring反射机制 反射机制是加载类时,在运行时动态地获取类的信息,并且可以操作类或对象的属性、方法、构造函数等成员的能力。在 Java 里,反射机制的实现主要依赖于 java.lang.reflect 包下的多个类,以及 java.lang 包中的 Class…...
PCB硬件电路设计_pcb布线设计
1.MCU最小系统电路 这些电路都会非常接近MCU,他们的可靠性决定了MCU能否正常工作。 外围电路,为了布线整齐美观,尽量避免打过多的通孔。在布局的时候走线的顺序和元器件顺序尽可能的保持一直避免走线交叉。 2.晶振电路布线 一般情况下我们…...
Qt开发:XML文件的写入与读取
文章目录 一、使用 QDomDocument操作节点1.1 将信息写入XML文件中1.2.从XML文件中读取信息 二、使用 QXmlStreamWriter操作节点2.1 将信息写入XML文件中2.2 从XML文件中读取信息 三、总结 一、使用 QDomDocument操作节点 1.1 将信息写入XML文件中 #include <QDomDocument&…...
PCI/PXI 总线的可编程电阻卡
701X 系列是阿尔泰科技基于 PCI/PXI 总线的可编程电阻卡,多种电阻范围可选,稳定性好;准确 度低至 0.2%;分辨率设置精细,可低至 0.125Ω,适用于传感器仿真应用。 701X 系列高精度程控电阻模块具有高设置分辨…...
火语言RPA--腾讯云存储
【组件功能】:存储本地文件至腾讯云 选择本地文件,通过腾讯云存储配置上传至腾讯云对象存储的指定地域指定存储桶指定路径。 配置预览 配置说明 SecretId 支持T或# 前往官网获取或创建。参考链接:https://console.cloud.tencent.com/cam/…...
使用POI和EasyExcel使用导入
1.使用POI导入 1.1导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency> 1.2创建工具类 package com.ruoyi.common.utils.poi;import org.ap…...
AWS PrivateLink vs Lattice:深度解析两大网络服务的异同
导语: 在AWS的网络服务生态中,PrivateLink和Lattice都是备受关注的解决方案。本文将深入探讨这两项服务的核心特性、应用场景以及它们之间的关键区别,帮助您在复杂的网络架构设计中做出明智的选择。 一、AWS PrivateLink 概述 定义 AWS PrivateLink 是一种网络服务,允许您…...
Linux系统编程---exec簇:进程的加载与替换
1、exec簇基础 在Linux中,用于加载并执行指定程序的API有exec簇和system函数。 exec簇的进程替换不会创建一个新的进程,只是加载新的程序代码和数据,替换当前进程执行的程序代码。 system函数的进程替换是创建一个新的子进程,然后…...
C++ 之 【模拟实现 list(节点、迭代器、常见接口)】(将三个模板放在同一个命名空间就实现 list 啦)
1.前提准备 (1) list 的底层结构一般是带头双向循环链表 (1)为避免命名冲突,需要创建一个命名空间来存放模拟实现的 list (2)下面模拟实现list时,声明和定义不分离(具体原因后续讲解) 2.完整实现 2.1 链表节点 template<class T>//节点写成类模板…...
数字图像处理 -- 眼底图像血管分割方法
算法框架 基于深度学习的 U-Net 架构,结合注意力机制(Attention Gate)与多尺度特征提取,以提高细小血管的检测能力。整体流程如下: 输入图像预处理:提取绿色通道 & CLAHE 增强数据增强:旋…...
基于ffmpeg的音视频编码
1 音频编码 本质上是由pcm文件转到一个协议文件 比如说aac协议 1.1 音频基本知识回归 比特率 比特率是指单位时间内传输或处理的比特(bit)数量,通常用 bps(bits per second,比特每秒)来表示。它是衡量数…...
Android wifi开发调试总结
Android wifi开发调试简单总结 文章目录 Android wifi开发调试简单总结一、前言二、wifi demo开发1、开关和连接2、wifi开启主要流程3 、wifi主要广播4、相关日志5、demo示例 三、其他1、Wifi开发小结2、其他wifi知识小结(1)Android无线Wifi开发…...
LLVIP、KAIST、M3FD数据集
LLVIP、KAIST、M3FD数据集 (可见光红外,双模态数据集,已配准已对齐已清洗,已处理为txt格式,YOLO可直接训练) 电子产品,一经出售,概不退换 算法设计、毕业设计、期刊专利!…...
datasets 数据处理封装后,统一处理流程以避免Dataset Map顺序依赖问题
文章目录 处理流程说明小结 在实际项目中,我们常常需要对数据集进行预处理。为了规范操作,我封装了一个基础数据集处理类: class DatasetAbstract:"""所有数据集都应包含以下几个字段:* question:用户…...
【学习笔记】机器学习(Machine Learning) | 第四章(3)| 多变量线性回归
机器学习(Machine Learning) 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习(Machine Learning)简要声明 三、特征工程与多项式回归(一)特征工程:从数据中发…...
将本地Springboot项目部署到Linux服务器
1、打包后端项目 在IDEA的终端上执行命令 mvn clean package "-Dmaven.test.skiptrue" 在target目录下查看jar包是否存在 2、idea运行jar包(可选) 在IDEA的终端上执行命令 # 进入jar包所在目录 E:\LzpWorkspaces\lzp-records> cd .\tar…...
无人设备遥控器之实时数据保护技术篇
无人设备遥控器的实时数据保护技术是保障设备安全运行、避免信息泄露或恶意干扰的核心手段,其核心目标是在复杂电磁环境和网络攻击威胁下,确保指令传输的完整性、保密性和抗干扰性。 一、技术实现路径 链路层加密与认证 动态密钥协商:采用…...
【优秀三方库研读】【性能优化点滴】odygrd/quill 解决伪共享
一、伪共享(False Sharing)问题本质 当不同CPU核心频繁修改**同一缓存行(Cache Line)**中的不同变量时,会导致严重的性能下降。现代CPU的缓存系统以缓存行(通常64字节)为单位操作内存ÿ…...
JavaScript性能优化实战(6):网络请求与资源加载优化
引言 在现代Web应用开发中,网络性能已成为影响用户体验的关键因素。据统计,用户等待页面加载的耐心通常不超过3秒,超过这个时间,约40%的用户会选择离开。此外,Google的研究表明,页面加载时间每增加0.5秒,流量就会下降约20%。因此,优化网络请求和资源加载不仅关乎用户体…...
re题(49)BUUCTF-crackMe
BUUCTF在线评测 int wmain() {FILE *v0; // eaxFILE *v1; // eaxchar v3; // [esp3h] [ebp-405h]char v4[256]; // [esp4h] [ebp-404h] BYREFchar Format[256]; // [esp104h] [ebp-304h] BYREFchar v6[256]; // [esp204h] [ebp-204h] BYREFchar v7[256]; // [esp304h] [ebp-10…...
Python中的单例模式:深入探索元类与装饰器实现
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 单例模式(Singleton Pattern)是设计模式中的一种重要模式,确保一个类在整个应用中只有一个实例,并且提供全局访问点。Python语言作为一…...
深入解析 Babylon.js 中的 TransformNode.lookAt 方法
在 3D 开发中,控制对象朝向是一个基础但关键的需求。Babylon.js 作为一款强大的 Web3D 引擎,提供了 TransformNode.lookAt 方法来实现这一功能。本文将全面解析这个方法的使用技巧、参数含义以及常见应用场景。 方法基础 TransformNode.lookAt 的基本签…...
SpringCloud组件——Gateway
一.网关 1.问题提出 我们通过Eureka,Nacos解决了服务注册,服务发现的问题,使用SpringCloud LoadBalance解决了负载均衡的问题,使用OpenFeign解决了远程调用的问题。 但是当前所有微服务的接口都是直接对外暴露的,可…...
Boost 库安装 (windows 11)
Boost 库安装 (windows 11 1 下载2 生成3 使用 1 下载 下载地址:https://www.boost.org/ 有的时候会需要历史版本下载: https://www.boost.org/users/history/ 2 生成 1、解压后点击 bootstrap.bat,会生成可执行程序b2.exe 2、双击运行b2.…...
lmms-eval--微调实战笔记
lmms-eval--大模型调用平台,方便新手上手大模型微调 lmms-eval的更多用法,没有mathversehttps://github.com/EleutherAI/lm-evaluation-harness.git 单卡运行,模型gpt-j-6B,数据集hellaswag git clone --depth 1 https://github.com/Eleuthe…...
序列密码算法ShanLooog512设计原理详解
序列密码算法ShanLooog512设计原理详解 ShanLooog512(闪龙512)为序列密码算法,内部状态为512比特,密钥长度为128或256比特,轮函数为FFFFFFFF,循环轮数为24轮,输出密钥流为512比特的状态。与Salsa20类似,内…...
Matplotlib可视化基础
1. 折线图 matplotlib.pyplot.plot() # 主要参数: x,y -- 接收array,表示X轴和Y轴对应的数据,无默认 color -- 接收特定string,指定线条的颜色,默认为None linestyle -- 接收特定string,指定线条的类型…...
Linux 内核网络协议栈中的关键数据结构:inet_skb_parm 与 ip_options
在 Linux 内核的网络协议栈中,数据包的高效处理依赖于一系列精心设计的数据结构。这些结构体不仅需要存储网络数据的元信息,还需支持复杂的协议逻辑(如路由、分片、安全策略等)。本文聚焦两个核心结构体 struct inet_skb_parm 和 struct ip_options,解析它们的设计原理、功…...
oracle 数据库查询指定用户下每个表占用空间的大小,倒序显示
oracle 查询指定用户下每个表占用空间的大小,倒序显示 使用场景:数据分析;导出医院正式库到开发环境时,查询出占用表空间高的业务表、导出时排除该表 在Oracle数据库中,要查询指定用户下每个表占用空间的大小并以倒序…...
Missashe考研日记-day29
Missashe考研日记-day29 1 专业课408 学习时间:3h学习内容: 今天先是把虚拟存储剩余的课听完了,然后就是做课后选择题,57道,已经接受了OS课后题尤其多的事实了。解决并且理解完习题之后就开始预习文件管理的内容&…...
【AI】【MCP】搭建私人王炸MCP自动化工作流
目录 一、什么是MCP 二、MCP大集合 三、准备工作 3.1 安装node.js 3.2 安装vscode 3.3 安装cline插件 3.3.1 安装 3.3.2 配置Cline 四、配置MCP服务 4.1 Search-mcp服务 4.2 playwright-mcp 服务 前言:梦想组合,轻松办公,告别手动&a…...
多元函数微分之传统方法和全微分法
一、传统方法 使用链式法则,先对中间变量(如 u,v)求偏导,再乘以中间变量对最终变量(如 x,y)的偏导。 二、全微分法 基于全微分形式不变性,直接对 zf(u,v) 求全微分 dz,再代入 du 和…...
新手SEO基础优化全解析
内容概要 对于刚接触SEO的新手而言,系统化理解优化逻辑是避免无效操作的关键。本文将从基础概念入手,逐步拆解搜索引擎排名的影响要素,围绕关键词分析、技术优化、内容策略三大核心模块,提供可落地的操作框架。通过结合工具使用说…...
MATLAB退火算法和遗传算法解决旅行商问题
模拟退火算法和遗传算法都是常用于解决旅行商问题(TSP)的优化算法,它们在原理、搜索方式、收敛速度和适用场景等方面存在一些区别: 原理 模拟退火算法:模拟退火算法的灵感来源于固体退火原理。固体在加热后缓慢冷却时…...
喜马拉雅卖身腾讯音乐:在线音频独立时代的终结
坦白说,这条消息一出来,喜马拉雅被卖掉不太奇怪,但是腾讯音乐会收购,还是有点意外。 喜马拉雅之前一度被称为中国版Audible平台,在过去几年里,活生生地把一手好牌打得稀烂。如今走到“卖身”这一步,既是无奈,也是必然。 简单回顾一下背景: 2012年,喜马拉雅成立,一…...
简单理解https与http
都是超文本传输协议,一个安全一个不安全,名字长的安全,名字短的不安全。 安全与不安全是居于什么分别的? 通过加密 http无加密。 httpshttp SSL/TSL(加密)来保障数据安全。加密传输 身份验证 SSL/TLS…...
打造即插即用的企业级云原生平台——KubeSphere 4.1 扩展组件在生产环境的价值全解
目录 打造即插即用的企业级云原生平台——KubeSphere 4.1 扩展组件在生产环境的价值全解 1. 可观测体系:WhizardTelemetry 全家桶 2. 平台与多集群治理 3. CI/CD 与交付效率 4. 网络与流量入口 5. 安全与合规 6. 存储与数据保护 7. 平台集成优势 结语 打造…...
配置扩展ACL
1.扩展ACL简介: 扩展ACL可以更精确地控制基于源IP地址、目标IP地址、协议类型和端口号的流量。 2.配置背景: 为了实现公司内部只能使用FTP服务器传输文件并关闭其他所有服务和端口的需求,可以通过配置访问控制列表(ACL…...
根据用户出生日期计算年龄
public static int calculateAgeFromDate(Date birthDate) { // 将 Date 转换为 LocalDate(默认时区) LocalDate birthLocalDate birthDate.toInstant() .atZone(ZoneId.systemDefault()) .toLocalDate(); // 获取当前日期LocalDate currentDate Local…...
测试基础笔记第十五天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、集合1.集合的定义二、使用集合列表去重 导包二、函数1.函数介绍2.定义函数3.调用函数4.函数实现登录案例5.函数的返回值 三、模块和包1.模块的概念(Module)2.模…...
【专题四】前缀和(3)
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;ÿ…...
STM32 USB配置详解
STM32 USB配置详解 一、USB基础概念 1.1 USB简介 USB (Universal Serial Bus) 是一种用于计算机与外部设备连接的串行总线标准,具有热插拔、即插即用等特点。STM32微控制器内置了多种USB接口,可实现各类USB应用。 1.2 USB速度等级 Low Speed (LS): …...
2025年Mapbox零基础入门教程(1)地图初始化
什么是mapbox? mapbox是一个地图框架,不仅提供前端渲染能力,还具备后端服务接口能力。 相较于openlayers,它可构建二维和三维地图,并支持优化导航路线和位置查询等功能。 开发中使用mapbox需引入库文件并设置token&…...
课外知识:你需要了解的Python类对象里面的__getattr__方法
你需要了解的Python类对象中的__getattr__方法 一、__getattr__基础概念 1. 方法定义 def __getattr__(self, name: str) -> Any:"""当访问不存在的属性时触发"""2. 核心特性 动态属性处理:拦截未定义的属性访问按需触发&…...