路由元信息里怎么传动态参数啊?
我在用 Vue Router 做权限控制,想在路由的 meta 里加个角色字段,但有些页面的角色是根据用户类型动态决定的,直接写死肯定不行。试过在路由守卫里改 meta,比如 to.meta.role = 'admin',但好像没生效,页面还是拿不到更新后的值。
是不是 meta 一旦定义就不能改了?那这种动态权限信息该怎么传才对?
const routes = [
{
path: '/dashboard',
component: Dashboard,
meta: { role: 'user' } // 这里想根据登录用户动态设置
}
]
to.meta确实能改成功,但问题是你的组件大概率在改之前就已经读取了原来的值,或者路由对象被缓存了,这做法本身就不靠谱。正确的做法是 meta 里定义"这个页面需要什么权限",然后在路由守卫里拿当前用户的角色去做校验,而不是反过来改 meta。
给你写个参考方案:
如果你的需求是"同一个页面不同用户看到不同内容",那应该在组件内部根据用户角色做条件渲染,而不是在路由层面搞动态权限。
还有个事得提醒一下,前端路由权限控制只是 UI 层面的,别太依赖它。真正的权限校验必须在后端接口做,前端防君子不防小人,随便改个 store 或者直接调接口就能绑过你的路由守卫。我之前见过好几个项目前端权限写得花里胡哨,后端接口全是裸奔的,这种安全漏洞真出了事就麻烦了。