权限管理

XYGo Admin 2025-02-20 146 次阅读

RBAC 角色权限 + 按钮级权限 + 字段级权限的完整体系

权限管理

XYGo Admin 实现了三级权限控制体系,从粗到细覆盖所有场景。

一、角色权限(RBAC)

基于角色的访问控制,管理员通过角色关联菜单权限。

角色类型

角色标识 说明
R_SUPER 超级管理员,拥有所有权限,不受权限校验限制
R_ADMIN 普通管理员,权限由分配的菜单决定
自定义 可创建任意角色并分配菜单权限

权限分配流程

  1. 创建角色
  2. 为角色分配菜单(勾选菜单树)
  3. 将角色分配给用户
  4. 用户登录后,后端返回该角色可访问的菜单列表
  5. 前端根据菜单列表动态注册路由

二、按钮级权限

精确控制页面中每个操作按钮的显隐。

后端配置

在菜单管理中,为页面菜单添加「按钮」类型的子节点:

  • 菜单类型:按钮
  • 权限标识:如 addeditdeleteexport

前端使用

通过 v-auth 指令控制按钮显隐:

vue 复制代码
<template>
  <!-- 只有拥有 add 权限的角色才能看到此按钮 -->
  <ElButton v-auth="'add'" type="primary">新增</ElButton>
  
  <!-- 多个权限(满足其一即可) -->
  <ElButton v-auth="['edit', 'update']" type="primary">编辑</ElButton>
</template>

v-auth 指令的工作原理:

  1. 从当前路由的 meta.authList 中获取权限列表
  2. 判断用户是否拥有指定权限
  3. 无权限则从 DOM 中移除该元素

角色指令

通过 v-roles 指令按角色控制:

vue 复制代码
<template>
  <!-- 只有超级管理员可见 -->
  <div v-roles="'R_SUPER'">超级管理员专属内容</div>
</template>

三、字段级权限

控制数据字段的可见性和可编辑性,适用于敏感数据保护。

配置方式

在后台「字段权限」管理中:

  1. 选择目标模块(如用户管理)
  2. 配置每个字段对不同角色的权限:
    • 可见:该角色可以看到此字段
    • 可编辑:该角色可以修改此字段
    • 隐藏:该角色看不到此字段

后端实现

通过 admin_field_perm 表存储字段权限配置,在查询和更新时自动过滤字段。

权限校验流程

复制代码
请求到达
  → AdminAuth 中间件
    → 解析 JWT Token
      → 获取用户角色
        → R_SUPER?直接放行
        → 检查请求路径是否在角色菜单权限中
          → 有权限:继续处理
          → 无权限:返回 403