Skip to content

角色与权限

角色与权限系统提供细粒度的访问控制,支持基于菜单的权限和按钮级别的授权。

功能特性

  • 角色增删改查及状态管理
  • 每个角色对应的菜单权限树
  • 通过 permissions 数组实现按钮级别的权限控制
  • 角色标识/名称重复检测
  • 角色-菜单关系管理

数据模型

SysRole(sys_role

字段类型描述
roleIdLong主键
roleNameString显示名称(如"管理员")
roleKeyString唯一标识符(如"admin")
roleSortInteger排序序号
statusInteger状态(0:禁用,1:启用)
remarkString备注

SysRoleMenu(sys_role_menu

字段类型描述
roleIdLong角色 ID
menuIdLong菜单 ID

这是一个多对多关联表,将角色与其允许访问的菜单关联起来。

API 接口

管理端 API

方法接口路径描述
GET/admin-api/list-all-role查询所有角色
POST/admin-api/list-role-ids获取用户的角色 ID 列表
POST/admin-api/role查询角色列表(分页)
POST/admin-api/role/create创建角色
PUT/admin-api/role/update更新角色
POST/admin-api/role/delete删除角色
POST/admin-api/role/status切换角色状态
POST/admin-api/role/save-menu保存角色的菜单权限
POST/admin-api/role-menu查询角色-菜单数据
POST/admin-api/role-menu-ids获取角色的菜单 ID 列表

RESTful API

方法接口路径描述
GET/system/role查询所有角色
GET/system/role/{id}根据 ID 查询角色
GET/system/role/key/{roleKey}根据标识查询角色
GET/system/role/all查询所有角色(不分页)
GET/system/role/active查询启用的角色
POST/system/role创建角色
PUT/system/role/{id}更新角色
DELETE/system/role/{id}删除角色
GET/system/role/exists/key检查角色标识是否存在
GET/system/role/exists/name检查角色名称是否存在

权限模型

菜单级权限

每个角色被分配一组菜单。当用户登录时,系统会加载与其角色关联的所有菜单来构建侧边栏导航。不在用户角色集中的菜单将被隐藏。

按钮级权限

菜单项可以设置 isButton = true 并带有一个 permission 字符串(如 system:user:create)。这些权限会在路由数据的 meta.auths 数组中返回。

在前端,使用 hasPerms() 工具函数来条件渲染按钮:

vue
<template>
  <el-button v-if="hasPerms(['system:user:create'])">
    Create User
  </el-button>
</template>

权限格式

权限遵循以下模式:module:entity:action

权限描述
system:user:create创建用户
system:user:update更新用户
system:user:delete删除用户
system:role:create创建角色
system:menu:create创建菜单

角色分配流程

  1. 管理员创建角色并通过权限树分配菜单权限
  2. 管理员在用户管理页面为用户分配角色
  3. 登录时,后端获取用户的角色及其合并后的菜单权限
  4. 前端根据这些权限构建侧边栏和按钮可见性

相关页面

Released under the MIT License.