权限管理

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.权限管理(菜单管理)

  • 管理列表:只返回当前账户所拥有的权限列表,超级管理员除外
  • 新增功能:只开放给超级管理员(研发),因为只有他们知道怎么配置菜单,尤其是path字段
  • 编辑功能:只开发给超级管理员(研发),因为只有他们知道怎么配置菜单
  • 删除功能:只开放给超级管理员(研发),因为只有他们知道怎么配置菜单,被删的节点存在子节点时,不允许删除

10.用户管理

  • 管理列表:返回所有数据,非超级管理员只返回普通用户,这个功能不做数据筛选,只限制功能开关

用户列表不能根据RBAC权限模型来返回对应的下属用户,因为新用户不属于任何角色,导致除了超级管理员以外的任何账号都无法对他进行管理,导致它永远无法被设置成任何角色

11.角色管理

  • 角色分级:超级管理员(开发)管‘能做什么’,系统管理员‘谁能做’(RBAC),业务只管‘去做’”

树的源头由超级管理员开启,接着由他的根(系统管理员)负责开枝散叶

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

13.公司管理

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