GoFrame + Vue3 权限系统设计:一个开源的 RBAC 三级权限实践

5 阅读3分钟

前言

权限管理是中后台系统的核心基础设施之一。从最早的 ACL 到主流的 RBAC,再到细粒度的按钮级和字段级控制,权限模型的演进反映了企业级应用对安全性日益增长的需求。

最近在调研开源后台框架时,发现一个很有意思的项目——XYGo Admin,它将 GoFrame + Vue3 的技术栈与三级权限体系融合得相当完整。本文从开发者视角拆解这套权限系统的设计与实现。

第一级:角色权限(RBAC)

RBAC(Role-Based Access Control)是这套体系的基石。XYGo Admin 定义了三种角色类型:

角色说明
R_SUPER超级管理员,所有权限放行
R_ADMIN普通管理员,权限由分配的菜单决定
自定义任意角色,勾选菜单树分配权限

权限分配流程很标准:创建角色 → 分配菜单(勾选树形菜单)→ 关联用户 → 用户登录后后端返回可访问菜单列表 → 前端动态注册路由。

后端通过 AdminAuth 中间件统一拦截:解析 JWT Token 获取用户角色,R_SUPER 直接放行,否则检查请求路径是否落在角色菜单权限内。这套流程在 GoFrame 的中间件机制下实现得比较优雅。

第二级:按钮级权限

树形菜单里的每个节点可以配置「按钮类型」子节点,权限标识如 addeditdeleteexport。前端通过自定义指令 v-auth 控制显隐:

<ElButton v-auth="'add'" type="primary">新增</ElButton>
<ElButton v-auth="['edit', 'update']" type="primary">编辑</ElButton>

v-auth 的工作原理是从当前路由元信息的 meta.authList 中匹配权限标识,无权限时直接从 DOM 移除元素——不是单纯 v-if 隐藏,而是彻底移除,避免敏感操作入口暴露。

同时还有一个 v-roles 指令,按角色标识控制内容可见性,适合做「超级管理员专属面板」这类场景。

第三级:字段级权限

字段级控制在 RBAC 体系中相对少见,但在涉密场景(财务、医疗、人事)中不可或缺。

实现方式是在 admin_field_perm 表中按模块配置每个字段对不同角色的权限:可见、可编辑、隐藏。后端在查询和更新时自动过滤字段,前端根据接口返回的字段配置动态渲染表单和表格。

比如同一个「用户管理」页面,HR 角色可以看到手机号和身份证,部门主管只能看到姓名和邮箱——字段级控制实现了同页面不同角色的数据隔离。

权限 + 代码生成器的配合

这套权限体系不是孤立的。框架内置的 CRUD 代码生成器 在生成代码时会自动注册菜单和权限数据,包括:

  • 菜单 SQL:自动插入菜单树和权限标识
  • API 路由:自动注册到权限校验链路
  • 按钮节点:列表页的增删改查按钮自动携带权限标识

意味着你从建表到上线,权限配置的大部分工作已经被自动化了。

总结

从粗粒度的角色权限到细粒度的按钮和字段控制,XYGo Admin 的权限体系给我们展示了一个完整的 RBAC 实现范例。对于正在选型或自建后台权限系统的团队,这套开源实现在 GoFrame + Vue3 的技术栈上提供了可直接参考的代码和设计思路。

更多技术细节和源代码可查看官方开发文档