当前位置: 首页 > news >正文

【权限模型】RBAC模型详解

        大家好,我是jstart千语。今天给大家介绍一下鉴权模型RBAC,传统的鉴权模式就是基于用户和权限之间的多对多关系。而RBAC就更加的精准,更好管理。

RBAC介绍

RBAC(Role-Based Access Control)是一种通过角色(Role)关联用户(User)和权限(Permission)的访问控制模型,核心思想是:用户→角色→权限

  • 用户(User):系统的实际使用者,拥有唯一标识。
  • 角色(Role):一组权限的集合,代表用户在系统中的职责(如管理员、普通用户)。
  • 权限(Permission):对系统资源的操作许可(如 “用户查看”、“订单删除”)。
  • 关联关系
    • 用户与角色:多对多(一个用户可拥有多个角色,一个角色可分配给多个用户)。
    • 角色与权限:多对多(一个角色可包含多个权限,一个权限可被多个角色拥有)。

优点:

  • 简化权限管理:通过角色统一管理权限,避免直接对用户逐个授权。
  • 灵活性:新增角色或修改角色权限时,无需逐个调整用户,只需关联角色即可。
  • 职责分离:符合现实中组织架构的职责划分(如财务角色、研发角色)。



库表设计

表名作用核心字段(主键、外键、索引)
sys_user用户表id(主键,自增)、username(唯一)、passwordemail
sys_role角色表id(主键,自增)、role_name(唯一,如 ROLE_ADMIN)、description
sys_permission权限表id(主键,自增)、permission_code(唯一,如 user:view)、permission_nametype(菜单 / 操作权限)
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 的约束机制有助于系统满足这些要求,如金融行业的监管要求。
  • 提高系统可靠性:通过约束条件,可以避免不合理的权限分配导致的系统故障和数据不一致问题。

http://www.xdnf.cn/news/197011.html

相关文章:

  • 东莞SMT贴片加工工艺优化解析
  • 青年座谈会的读书汇报
  • Kotlin DSL 深度解析:从 Groovy 迁移的困惑与突破
  • vue3 如何设置全局属性
  • Docker的常用命令
  • WPF之Button控件详解
  • Crusader Kings III 王国风云 3(十字军之王 3) [DLC 解锁] [Steam] [Windows SteamOS macOS]
  • 多元函数微分之传统方法和全微分法
  • Qt笔记-自定义托盘弹出界面
  • 用于表格数据的神经网络分类器_TabPFN
  • Vuex持续保存数据 页面刷新不丢失 vuex-persistedstate
  • WPF 程序监控硬件设备状态变化的实现方案
  • vscode源代码管理Tab-文件右侧标志(M、A 等)的含义
  • await和async
  • (28)VTK C++开发示例 ---添加坐标轴
  • std::print 和 std::println
  • echarts自定义图表--仪表盘
  • 【机器学习】人工智能在电力电子领域的应用
  • 反射与注解实现动态功能扩展案例-插件系统
  • 模型上下文协议(MCP)深度解析:大模型从“思考者“进化为“行动者“
  • 总账主数据——Part 2 科目-4
  • 优先队列和单调队列(双端队列实现的)
  • stm32wb55rg (1) 基于IAR 创建stm32 工程模板
  • 序列密码算法ShanLooog512设计原理详解
  • DeepSearch复现篇:QwQ-32B ToolCall功能初探,以Agentic RAG为例
  • React速通笔记
  • 初识Python
  • 【Keil5-开发指南】
  • Java实现基数排序算法
  • 机器学习day2