服务端基于RBAC设计权限系统
RBAC是什么?
Role-Based Access Control,中文意思是:基于角色(Role)的访问控制。是一种常用的权限控制系统,它通过将用户分配到不同的角色中,并为每个角色授予一组特定的权限,来实现对用户访问资源的控制
RBAC 的好处
简化权限管理:RBAC 将权限与角色进行绑定,用户只需被分配合适的角色,即可自动获得相应的权限,简化了权限的管理与维护。
提高灵活性:RBAC 允许动态地添加、修改和删除角色,使得权限管理更加灵活,能够快速适应业务变化。
方便权限审计:RBAC 通过角色对权限进行分组,使得权限的审计和监控更加方便,可以对角色的权限进行集中管理。
促进安全:RBAC 将权限控制逻辑与业务逻辑分离,降低了权限控制的复杂性,从而提高了系统的安全性。
提高员工效率:RBAC 可以根据员工的职责和需求分配合适的角色,使得员工能够更方便地访问所需的资源,提高工作效率。
数据库表设计
数据库表ERP图

sys_user 用户信息表
| 字段 | 类型 | 空 | 默认 | 注释 |
|---|
| id (主键) | bigint | 否 | - | 用户ID |
| business_id | varchar(100) | 否 | - | 用户业务ID |
| username | varchar(80) | 否 | - | 用户名 |
| nickname | varchar(80) | 是 | - | 用户昵称 |
| avatar | varchar(255) | 是 | - | 头像地址 |
| email | varchar(255) | 是 | - | 邮箱 |
| address | varchar(255) | 是 | - | 地址 |
| phone_number | varchar(11) | 是 | - | 手机号码 |
| salt | varchar(200) | 否 | - | 盐 |
| password | varchar(100) | 否 | 123456 | 密码 |
| status | tinyint(0) | 否 | 1 | 状态: 1-有效,0-禁用 |
| create_by | varchar(30) | 否 | - | 创建者 |
| create_time | timestamp(6) | 否 | - | 创建时间 |
| update_by | varchar(30) | 是 | - | 更新者 |
| update_time | timestamp(6) | 是 | - | 更新时间 |
| remark | text | 是 | - | 备注 |
sys_menu 菜单表
| 字段 | 类型 | 空 | 默认 | 注释 |
|---|
| id (主键) | bigint | 否 | - | 菜单ID |
| menu_name | varchar(80) | 否 | - | 菜单名称 |
| menu_type | char(1) | 是 | - | 菜单类型:D-目录, M-菜单, B-按钮 |
| icon | varchar(100) | 是 | - | 菜单图标 |
| parent_id | bigint(0) | 否 | - | 父级菜单ID |
| order_num | int(0) | 否 | 0 | 排序 |
| route_name | varchar(80) | 否 | - | 前端路由名称 |
| path | varchar(255) | 是 | - | 路由地址 |
| query | varchar(255) | 是 | - | 路由参数 |
| component | varchar(255) | 是 | - | 组件路径 |
| permission | varchar(255) | 是 | - | 权限标识 |
| breadcrumb | tinyint(1) | 是 | 1 | 面包屑:0-不显示在面包屑, 1-显示 |
| is_keepalive | tinyint(1) | 是 | 1 | 缓存:0-是, 1-否 |
| is_external_link | tinyint(1) | 是 | 1 | 外链:0-是, 1-否 |
| affix | tinyint(1) | 是 | 0 | 固定到标签栏:0-不固定到标签栏, 1-固定 |
| visible | tinyint(1) | 是 | 1 | 菜单状态:0-显示, 1-隐藏 |
| status | tinyint(0) | 否 | 1 | 状态: 1-启用,0-禁用 |
| create_by | varchar(30) | 否 | - | 创建者 |
| create_time | timestamp(6) | 否 | - | 创建时间 |
| update_by | varchar(30) | 是 | - | 更新者 |
| update_time | timestamp(6) | 是 | - | 更新时间 |
| remark | text | 是 | - | 备注 |
sys_role 角色表
| 字段 | 类型 | 空 | 默认 | 注释 |
|---|
| id (主键) | bigint | 否 | - | 角色ID |
| role_name | varchar(80) | 否 | - | 角色名称 |
| role_value | varchar(100) | 否 | - | 角色值 |
| order_num | int(0) | 否 | 0 | 排序 |
| status | tinyint(0) | 否 | 1 | 状态: 1-启用,0-禁用 |
| create_by | varchar(30) | 否 | - | 创建者 |
| create_time | timestamp(6) | 否 | - | 创建时间 |
| update_by | varchar(30) | 是 | - | 更新者 |
| update_time | timestamp(6) | 是 | - | 更新时间 |
| remark | text | 是 | - | 备注 |
sys_user_role 用户和角色关联表
| 字段 | 类型 | 空 | 默认 | 注释 |
|---|
| id (主键) | bigint | 否 | - | - |
| user_id | bigint | 否 | - | 用户ID |
| role_id | bigint | 否 | - | 角色ID |
sys_role_menu 角色和菜单关联表
| 字段 | 类型 | 空 | 默认 | 注释 |
|---|
| id (主键) | bigint | 否 | - | - |
| role_id | bigint | 否 | - | 角色ID |
| menu_id | bigint | 否 | - | 菜单ID |
sys_dept 部门表
| 字段 | 类型 | 空 | 默认 | 注释 |
|---|
| id (主键) | bigint | 否 | - | 部门ID |
| dept_name | varchar(80) | 否 | - | 部门名称 |
| leader | varchar(80) | 是 | - | 部门负责人 |
| parent_id | bigint(0) | 否 | - | 父级部门ID |
| order_num | int(0) | 否 | 0 | 排序 |
| status | tinyint(0) | 否 | 1 | 状态: 1-启用,0-禁用 |
| create_by | varchar(30) | 否 | - | 创建者 |
| create_time | timestamp(6) | 否 | - | 创建时间 |
| update_by | varchar(30) | 是 | - | 更新者 |
| update_time | timestamp(6) | 是 | - | 更新时间 |
| remark | text | 是 | - | 备注 |
sys_user_dept 用户和部门关联表
| 字段 | 类型 | 空 | 默认 | 注释 |
|---|
| id (主键) | bigint | 否 | - | - |
| user_id | bigint | 否 | - | 用户ID |
| dept_id | bigint | 否 | - | 部门ID |
接口
- 接口已完成一部分,后续根据需求会完成完善更多接口,需要查看源码可以关注github

github
项目地址:nest_vhen_blog