处理 vue 权限联动需分层设计:权限状态集中管理但按模块分组,路由守卫与组件指令双层拦截,表单字段通过 schema 驱动,api 请求前预检权限并抛出明确错误。

处理 Vue 中复杂的权限联动逻辑,关键不在堆代码,而在分层设计和职责分离。权限不是孤立的“能看/不能看”,它会牵动路由、菜单、按钮、表单字段甚至 API 请求行为。真正难的是让这些环节响应一致、更新及时、不互相干扰。
权限状态要集中存,但不能只存“有无”
把权限列表(如 ['user:read', 'order:edit', 'report:export'])存在 Pinia 或 Vuex 里是基础,但仅此不够。真实业务中常需:
- 按模块分组缓存权限,比如
menuPermissions和apiPermissions分开管理,避免菜单渲染时触发无关的 API 权限校验 - 记录权限来源(登录接口返回?动态加载?本地 mock?),方便调试时快速定位失效原因
- 支持细粒度标记,例如
'product:price:edit'和'product:price:view'要能独立判断,而不是只靠字符串包含匹配
路由守卫 + 组件指令,双层拦截更可靠
单靠路由守卫防不住用户手动改 URL 或跳过导航;只靠组件内 v-if 又可能留下空白页或报错。建议组合使用:

