权限管理

1.前言

  • 后台管理系统的权限管理一般使用RBAC,它是 Role-Based Access Control 的缩写,中文译为 基于角色的访问控制,是一种广泛使用的权限管理模型
  • 它的核心思想是通过“角色”这一中间层,将用户(User)和权限(Permission)解耦,从而实现更灵活、高效的权限分配和管理
  • 通过 用户 → 角色 → 权限,用户通过角色间接获得权限

2.RBAC 的核心组成

  • 用户(User):系统的具体使用者(如员工、管理员)
  • 角色(Role):权限的集合,代表某种职能或身份(如“管理员”“财务”“普通用户”)
  • 权限(Permission):对资源或操作的最小控制单元(如“访问菜单A”“删除数据B”)

3.RBAC 的核心优势

  • 复用性:同一角色可分配给多个用户,避免重复配置权限
  • 易维护:修改角色权限时,关联用户自动生效
  • 逻辑清晰:角色名称通常反映业务职能(如“财务审核员”),便于理解和管理

4.权限表

  • 前端:对于前端而言,权限决定菜单是否展示,页面是否可以访问,按钮是否展示等
  • 后端:对于后端而言,权限决定api是否可以访问
  • 唯一索引:path
字段 说明 类型 默认值
title 标题(前端用于菜单展示) DataTypes.STRING -
name 名称(前端用于路由注册) DataTypes.STRING -
path 路径(对于前端是页面路径,对于后端是接口地址) DataTypes.STRING -
pid 父级id DataTypes.INTEGER 0
icon 图标 DataTypes.STRING -
remarks 描述 DataTypes.TEXT -
sort 排序 DataTypes.INTEGER 0
isMenu 是否展示菜单(用于区分页面还是API) DataTypes.INTEGER 1
isFull 是否全屏展示 DataTypes.INTEGER 0

5.用户表

  • 记录用户基本信息,还有各端登录的Token值
  • 唯一索引:userName
字段 说明 类型 默认值
userName 用户名 DataTypes.STRING -
nickName 昵称 DataTypes.STRING -
password 密码 DataTypes.STRING -
status 启用状态 DataTypes.INTEGER 1
isAdmin 是否是超级管理员 DataTypes.INTEGER 0
token web登录令牌 DataTypes.STRING -
appToken App登录令牌 DataTypes.STRING -
lastLoginTime 最后登录时间 DataTypes.DATE -

6.角色表

  • 记录角色基本信息,还有父级关联信息
字段 说明 类型 默认值
roleName 角色名 DataTypes.STRING -
description 描述 DataTypes.TEXT -
pid 父级id DataTypes.INTEGER 0

7.用户角色关联表

  • 记录 用户-角色 的关联关系,可以做外键,当基础数据被删除时,关联数据自动删除
  • 唯一索引:userId + roleId
字段 说明 类型 默认值
userId 用户id(外键->User) DataTypes.INTEGER -
roleId 角色id(外键->Role) DataTypes.INTEGER -

8.角色权限关联表

  • 记录 角色-权限 的关联关系,可以做外键,当基础数据被删除时,关联数据自动删除
  • 唯一索引:permissionId + roleId
字段 说明 类型 默认值
permissionId 权限id(外键->Permission) DataTypes.INTEGER -
roleId 角色id(外键->Role) DataTypes.INTEGER -

9.权限管理

  • 管理列表:只返回当前账户所拥有的权限列表,具体的算法为:用户->角色(roleIds)->角色权限关联表->权限列表,超级管理员除外
  • 新增功能:只开放给超级管理员(研发),因为只有他们知道怎么配置菜单,尤其是path字段
  • 编辑功能:只开发给系统管理员,负责 开启 / 隐藏 部分功能
  • 删除功能:只开放给超级管理员(研发),且被删的节点存在子节点时,不允许删除

10.用户管理

  • 管理列表:只返回自己和下属的用户列表,超级管理员除外
当前用户 -> 查询自身roleIds -> 查询子角色roleIds -> 合并roleIds -> 通过 用户-角色 关联表进行筛选 -> 返回用户列表

11.角色管理

  • 管理列表:只返回自身角色和下属角色列表,超级管理员除外
当前用户 -> 查询自身roleIds -> 查询子角色roleIds -> 合并roleIds -> 返回用户列表
  • 角色权限:角色所在列可以查看和设置该角色的权限(树形结构),逻辑难点,因为要根据当前账号和选中的节点角色返回权限范围
  • 人员角色批量配置:在当前角色所在列中,展示已经绑定的关联关系和设定关联关系

13.公司管理

  • 管理列表:只返回拥有权限的公司列表,超级管理员除外(做分页控制),过滤条件在前端完成(方便进行颜色标注)
  • 全部列表:只返回拥有权限的公司列表,超级管理员除外(不做分页,用于右上角公司切换)
当前用户 -> 查询自身roleIds -> 通过 用户-数据角色 关联表进行筛选 -> 返回公司列表
posted @ 2025-07-10 09:50  ---空白---  阅读(21)  评论(0)    收藏  举报