路由守卫是实现rbac最直接方式,通过meta.roles声明角色权限,在beforeeach中校验用户角色与路由要求的交集,并处理刷新丢失、异步权限获取及白名单放行。

路由守卫是实现基于角色访问控制(RBAC)最直接、最常用的方式。它在用户跳转前介入,结合角色信息与路由元数据做实时判断,既保证安全性,又不影响体验。
在路由配置中声明角色要求
为需要权限的路由添加 meta.roles 字段,明确哪些角色可以访问:
-
/admin 路由只允许 admin 访问:
meta: { roles: ['admin'] } -
/profile 允许 user 和 admin:
meta: { roles: ['user', 'admin'] } - 登录页、404页等无需鉴权的路由不设 roles,或显式设
requiresAuth: false
用全局前置守卫做统一校验
在 router.beforeEach 中读取当前用户角色(通常来自 Vuex/Pinia 或 localStorage),并与目标路由的 meta.roles 对比:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 若目标路由没设 roles,直接放行
- 若设了但当前角色不在列表中,跳转到 /401 或首页
- 若匹配成功,继续导航;不匹配时还可记录日志或触发提示
支持多角色和灵活匹配逻辑
用户可能拥有多个角色(如 ['user', 'editor']),校验时应使用交集判断而非严格相等:
- 用
to.meta.roles.some(role => userRoles.includes(role))替代=== - 避免硬编码角色名,可封装成工具函数如
canAccess(to, userRoles) - 配合 requiresAuth 字段,先判登录态再判角色,分层处理更清晰
注意刷新后的状态恢复
页面刷新会导致角色信息丢失,需在守卫中补全初始化逻辑:
- 有 token 但无角色时,先调用接口拉取权限,再动态 addRoute 或更新 store
- 避免守卫中直接 next() 导致路由错乱,异步获取权限后要用
next({ ...to })重试导航 - 对白名单路径(如 /login、/register)始终放行,防止登录流程被拦截










