用了这么多 vue3后台权限管理框架,能把 RBAC 做成按钮级的还真不多

4 阅读3分钟

做后台管理系统最头疼的是什么?不是页面布局,不是接口联调——是权限。角色一多、菜单一复杂,权限代码就像意大利面一样缠在一起。if-else 满天飞,v-if 嵌套三层起步,改一个角色要扒五六份代码。

一个靠谱的 vue3后台管理框架,权限这块一定得做到位。

三级权限,从粗到细层层兜底

大部分 vue3后台框架 的权限止步于"这个角色能不能访问这个页面"。但 XYGo Admin 把粒度拆成了三层:

角色权限(RBAC)——最外层,控制谁能看到哪些菜单。创建角色 → 勾选菜单树 → 分配给用户,登录后后端返回该角色的菜单列表,前端动态注册路由。超级管理员 R_SUPER 不受任何权限校验限制,普通管理员由分配的菜单决定。

按钮级权限——这才是点睛之笔。同一个页面,不同角色看到的操作按钮可以完全不同。通过 v-auth 指令精确控制:

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

v-auth 从当前路由的 meta.authList 中取出权限列表做匹配,没权限的元素直接从 DOM 中移除,不是隐藏,是彻底不渲染。还有 v-roles 指令按角色做控制,比如只有超级管理员才能看到某些敏感内容。

字段级权限——再往下钻一层,同一个数据表单里,不同角色能看到和编辑的字段也可以不一样。比如"会员手机号"只有客服主管角色可见,"内部备注"只有管理员可编辑,这些都在后台「字段权限」管理中配置,后端通过 admin_field_perm 表在查询和更新时自动过滤字段。

这一套 rbac权限模型 真正做到了从菜单 → 按钮 → 字段的逐级收敛。

动态路由 + 双路由体系

权限跟路由是一体两面。XYGo Admin 采用前台 + 后台双路由体系:前台门户(首页、文档、社区)用 / 前缀静态注册;后台管理用 /admin 前缀,根据角色权限动态加载。用户首次访问后台路由时,beforeEach 守卫先检查 Token,再从后端拉取菜单列表,经 RouteTransformer 转成 Vue Router 路由后由 RouteRegistry 动态注册。

这和那些把所有路由写死在 router/index.ts 里的 vue3后台管理系统框架 完全不同——权限变了,不用改前端代码,后端菜单配置一调,路由自动跟上。

代码生成器把权限一起带出来

写完权限逻辑还不够——新增一个模块时,菜单、路由、权限标识这些配套工作往往比写 CRUD 本身还费时间。XYGo Admin 的代码生成器从数据库表一键生成前后端代码时,会自动插入菜单 SQL 和权限数据,API 接口定义、控制器、业务逻辑、前端列表页和编辑弹窗全部自动产出。建完表、点生成、重启服务,前端热更新即时生效。


回过头看,一个合格的 vue3后台权限管理框架,不应该只给你一把"路由守卫"的锤子,然后把所有权限问题都当成钉子去敲。角色、按钮、字段——三层分工明确,代码生成与权限体系打通,才是一个企业级中后台该有的样子。