当前位置: 首页 > 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 的约束机制有助于系统满足这些要求,如金融行业的监管要求。
  • 提高系统可靠性:通过约束条件,可以避免不合理的权限分配导致的系统故障和数据不一致问题。

相关文章:

  • Spring Security源码解析
  • DeepSeek+Dify之三工作流引用知识库案例
  • 解锁服务器迁移的未来:《2025 服务器迁移效率白皮书》(附下载)
  • 安卓开发学习随记
  • Redis 常见问题深度剖析与全方位解决方案指南
  • 「地平线」创始人余凯:自动驾驶尚未成熟,人形机器人更无从谈起
  • 【Java学习笔记】传参机制
  • 仙宫云ComfyUI —【Wan2.1】AI视频生成部署
  • uniapp利用生命周期函数实现后台常驻示例
  • 代码随想录算法训练营第二十九天
  • 《淘宝 API 数据湖构建:实时商品详情入湖 + Apache Kafka 流式处理指南》
  • 为什么使用ThreadLocal后要调用remove()方法呢?
  • Springboot整合阿里云腾讯云发送短信验证码 可随时切换短信运营商
  • 数智双翼,生态共赢:中钧科技“双帮”如何领航企业全域升级?
  • 【java】接口
  • OpenResty深度解析:从卓伊凡的”隐形主流”论看其深度原理与应用生态-卓伊凡
  • Label Studio 软件介绍及安装使用说明
  • QGIS+mcp的安装和使用
  • 【零基础入门】ASP.NET Core快速搭建第一个Web应用
  • Shiro学习(七):总结Shiro 与Redis 整合过程中的2个问题及解决方案
  • 路边“僵尸车”被人以1450元卖了,嫌疑人被刑拘
  • “85后”潘欢欢已任河南中豫融资担保有限公司总经理
  • “五一”假期倒计时,节前错峰出游机票降价四成
  • 见证上海援藏30年成果,萨迦非遗珍品展来沪
  • 格力电器去年净利增长一成:消费电器营收下滑4%,一季度净利增长26%
  • 51岁国家移民管理局移民事务服务中心联络部副主任林艺聪逝世