权限管理
XYGo Admin 2025-02-20 146 次阅读
RBAC 角色权限 + 按钮级权限 + 字段级权限的完整体系
权限管理
XYGo Admin 实现了三级权限控制体系,从粗到细覆盖所有场景。
一、角色权限(RBAC)
基于角色的访问控制,管理员通过角色关联菜单权限。
角色类型
| 角色标识 | 说明 |
|---|---|
| R_SUPER | 超级管理员,拥有所有权限,不受权限校验限制 |
| R_ADMIN | 普通管理员,权限由分配的菜单决定 |
| 自定义 | 可创建任意角色并分配菜单权限 |
权限分配流程
- 创建角色
- 为角色分配菜单(勾选菜单树)
- 将角色分配给用户
- 用户登录后,后端返回该角色可访问的菜单列表
- 前端根据菜单列表动态注册路由
二、按钮级权限
精确控制页面中每个操作按钮的显隐。
后端配置
在菜单管理中,为页面菜单添加「按钮」类型的子节点:
- 菜单类型:按钮
- 权限标识:如
add、edit、delete、export
前端使用
通过 v-auth 指令控制按钮显隐:
vue
<template>
<!-- 只有拥有 add 权限的角色才能看到此按钮 -->
<ElButton v-auth="'add'" type="primary">新增</ElButton>
<!-- 多个权限(满足其一即可) -->
<ElButton v-auth="['edit', 'update']" type="primary">编辑</ElButton>
</template>
v-auth 指令的工作原理:
- 从当前路由的
meta.authList中获取权限列表 - 判断用户是否拥有指定权限
- 无权限则从 DOM 中移除该元素
角色指令
通过 v-roles 指令按角色控制:
vue
<template>
<!-- 只有超级管理员可见 -->
<div v-roles="'R_SUPER'">超级管理员专属内容</div>
</template>
三、字段级权限
控制数据字段的可见性和可编辑性,适用于敏感数据保护。
配置方式
在后台「字段权限」管理中:
- 选择目标模块(如用户管理)
- 配置每个字段对不同角色的权限:
- 可见:该角色可以看到此字段
- 可编辑:该角色可以修改此字段
- 隐藏:该角色看不到此字段
后端实现
通过 admin_field_perm 表存储字段权限配置,在查询和更新时自动过滤字段。
权限校验流程
请求到达
→ AdminAuth 中间件
→ 解析 JWT Token
→ 获取用户角色
→ R_SUPER?直接放行
→ 检查请求路径是否在角色菜单权限中
→ 有权限:继续处理
→ 无权限:返回 403