增强版 RBAC 权限管理数据库设计

概述

本设计方案基于 RBAC (Role-Based Access Control) 模式,旨在构建一个灵活、可扩展、易维护的权限管理系统。该方案不仅包含基本的角色、权限和资源管理,还增强了数据权限控制、字典管理和操作日志功能,以满足更复杂的业务需求。

数据库表结构

用户表 (sys_user)

字段名 数据类型 是否为空 默认值 说明
id BIGINT 自增长 用户ID,主键
username VARCHAR(255) 用户名,唯一索引
password VARCHAR(255) 密码
real_name VARCHAR(255) 真实姓名
email VARCHAR(255) 邮箱
phone VARCHAR(20) 电话
avatar VARCHAR(255) 头像 URL
status INT 1 (启用) 用户状态 (1: 启用, 0: 禁用)
create_time DATETIME 当前时间 创建时间
update_time DATETIME 当前时间 更新时间

角色表 (sys_role)

字段名 数据类型 是否为空 默认值 说明
id BIGINT 自增长 角色ID,主键
role_name VARCHAR(255) 角色名称,唯一索引
role_code VARCHAR(255) 角色编码,唯一索引
description TEXT 角色描述
data_scope VARCHAR(255) ‘all’ 数据范围 (all, self, dept, custom)
status INT 1 (启用) 角色状态 (1: 启用, 0: 禁用)
create_time DATETIME 当前时间 创建时间
update_time DATETIME 当前时间 更新时间

部门表 (sys_dept)

字段名 数据类型 是否为空 默认值 说明
id BIGINT 自增长 部门ID,主键
dept_name VARCHAR(255) 部门名称
parent_id BIGINT 0 父部门ID
dept_code VARCHAR(255) 部门编码,唯一索引
description TEXT 部门描述
status INT 1 (启用) 部门状态 (1: 启用, 0: 禁用)
create_time DATETIME 当前时间 创建时间
update_time DATETIME 当前时间 更新时间

菜单表 (sys_menu)

字段名 数据类型 是否为空 默认值 说明
id BIGINT 自增长 菜单ID,主键
menu_name VARCHAR(255) 菜单名称
menu_code VARCHAR(255) 菜单编码,唯一索引
parent_id BIGINT 0 父菜单ID
path VARCHAR(255) 菜单路径
icon VARCHAR(255) 菜单图标
component VARCHAR(255) 前端组件路径
sort INT 0 排序
type VARCHAR(255) ‘menu’ 菜单类型 (menu, button, link)
status INT 1 (启用) 菜单状态 (1: 启用, 0: 禁用)
create_time DATETIME 当前时间 创建时间
update_time DATETIME 当前时间 更新时间

权限表 (sys_permission)

字段名 数据类型 是否为空 默认值 说明
id BIGINT 自增长 权限ID,主键
permission_name VARCHAR(255) 权限名称
permission_code VARCHAR(255) 权限编码,唯一索引
description TEXT 权限描述
create_time DATETIME 当前时间 创建时间
update_time DATETIME 当前时间 更新时间

资源表 (sys_resource)

字段名 数据类型 是否为空 默认值 说明
id BIGINT 自增长 资源ID,主键
resource_name VARCHAR(255) 资源名称
resource_path VARCHAR(255) 资源路径
resource_type VARCHAR(255) 资源类型 (例如:文件、API)
description TEXT 资源描述
create_time DATETIME 当前时间 创建时间
update_time DATETIME 当前时间 更新时间

字典表 (sys_dict)

字段名 数据类型 是否为空 默认值 说明
id BIGINT 自增长 字典ID,主键
dict_name VARCHAR(255) 字典名称
dict_code VARCHAR(255) 字典编码,唯一索引
description TEXT 字典描述
create_time DATETIME 当前时间 创建时间
update_time DATETIME 当前时间 更新时间

字典项表 (sys_dict_item)

字段名 数据类型 是否为空 默认值 说明
id BIGINT 自增长 字典项ID,主键
dict_id BIGINT 所属字典ID,外键关联 sys_dict
item_name VARCHAR(255) 字典项名称,例如 “启用”
item_value VARCHAR(255) 字典项值,例如 “1”
sort INT 0 排序
description TEXT 字典项描述
status INT 1 (启用) 字典项状态 (1: 启用, 0: 禁用)
create_time DATETIME 当前时间 创建时间
update_time DATETIME 当前时间 更新时间

用户角色关系表 (sys_user_role)

字段名 数据类型 是否为空 默认值 说明
user_id BIGINT 用户ID,外键关联 sys_user
role_id BIGINT 角色ID,外键关联 sys_role
create_time DATETIME 当前时间 创建时间

用户部门关系表 (sys_user_dept)

字段名 数据类型 是否为空 默认值 说明
user_id BIGINT 用户ID,外键关联 sys_user
dept_id BIGINT 部门ID,外键关联 sys_dept
create_time DATETIME 当前时间 创建时间

权限资源关系表 (sys_permission_resource)

字段名 数据类型 是否为空 默认值 说明
permission_id BIGINT 权限ID,外键关联 sys_permission
resource_id BIGINT 资源ID,外键关联 sys_resource
create_time DATETIME 当前时间 创建时间

角色权限关系表 (sys_role_permission)

字段名 数据类型 是否为空 默认值 说明
role_id BIGINT 角色ID,外键关联 sys_role
permission_id BIGINT 权限ID,外键关联 sys_permission
create_time DATETIME 当前时间 创建时间

角色菜单关系表 (sys_role_menu)

字段名 数据类型 是否为空 默认值 说明
role_id BIGINT 角色ID,外键关联 sys_role
menu_id BIGINT 菜单ID,外键关联 sys_menu
create_time DATETIME 当前时间 创建时间

角色数据权限范围表 (sys_role_data_scope)

字段名 数据类型 是否为空 默认值 说明
id BIGINT 自增长 主键
role_id BIGINT 角色ID,外键关联 sys_role
dept_id BIGINT 部门ID,外键关联 sys_dept 表,当角色数据范围为 dept 时使用
custom_scope TEXT 自定义数据范围,存储 JSON 格式数据,当角色数据范围为 custom 时使用
create_time DATETIME 当前时间 创建时间

操作日志表 (sys_operation_log)

字段名 数据类型 是否为空 默认值 说明
id BIGINT 自增长 日志ID,主键
user_id BIGINT 操作用户ID,外键关联 sys_user
operation_type VARCHAR(255) 操作类型 (例如:create, update, delete)
operation_module VARCHAR(255) 操作模块 (例如:user, role, menu)
operation_desc TEXT 操作描述
request_url VARCHAR(255) 请求 URL
request_method VARCHAR(255) 请求方法
request_params TEXT 请求参数
response_data TEXT 响应数据
ip_address VARCHAR(255) IP 地址
create_time DATETIME 当前时间 创建时间

表关系图 (简述)

  • 用户与角色: sys_user 表和 sys_role 表之间通过 sys_user_role 表形成多对多关系。一个用户可以拥有多个角色,一个角色可以被多个用户拥有。
  • 用户与部门: sys_user 表和 sys_dept 表之间通过 sys_user_dept 表形成多对多关系。一个用户可以属于多个部门,一个部门可以有多个用户。
  • 角色与权限: sys_role 表和 sys_permission 表之间通过 sys_role_permission 表形成多对多关系。一个角色可以拥有多个权限,一个权限可以被多个角色拥有。
  • 权限与资源: sys_permission 表和 sys_resource 表之间通过 sys_permission_resource 表形成多对多关系。一个权限可以访问多个资源,一个资源可以被多个权限访问。
  • 角色与菜单: sys_role 表和 sys_menu 表之间通过 sys_role_menu 表形成多对多关系。一个角色可以访问多个菜单,一个菜单可以被多个角色访问。
  • 字典与字典项: sys_dict 表和 sys_dict_item 表之间是一对多关系。一个字典可以包含多个字典项。
  • 角色与数据范围: sys_role 表和 sys_role_data_scope 表之间是一对一或一对多的关系(取决于 data_scope 的值)。用于存储角色对应的数据权限范围,包括部门或自定义范围。
  • 操作日志与用户: sys_operation_log 表通过 user_id 字段外键关联到 sys_user 表,记录用户的操作行为。

关键概念说明

  • 数据范围 (data_scope): sys_role 表中的 data_scope 字段定义了角色所能访问的数据范围。
    • all: 可以访问所有数据。
    • self: 只能访问自己的数据。
    • dept: 只能访问自己所在部门的数据,具体部门在 sys_role_data_scope 表中关联。
    • custom: 可以访问自定义的数据范围,具体范围在 sys_role_data_scope 表中以 JSON 格式存储。
  • 权限编码 (permission_code): sys_permission 表中的 permission_code 字段用于程序中进行权限校验。
  • 菜单编码 (menu_code): sys_menu 表中的 menu_code 字段用于前端路由和权限控制。
  • 字典编码 (dict_code): sys_dict 表中的 dict_code 字段用于在代码中获取对应的字典项。
  • 资源路径 (resource_path): sys_resource 表中的 resource_path 字段用于 API 接口或静态资源的权限控制。

总结

本数据库设计方案旨在提供一个全面、灵活的权限管理系统,涵盖了用户、角色、部门、菜单、权限、资源、字典等多个方面。通过合理的表结构和关系设计,可以满足复杂业务场景下的权限管理需求,并方便后续的扩展和维护。同时,数据范围控制、字典管理和操作日志的加入,使得系统更加完善和健壮。