背景:vue + vue router 经过登陆的权限去判断页面的权限,好比管理员能查看A和B页面,而 普通用户只能查看A页面。查了不少资料都用的是动态路由,可是我没有用那个去实 现, 这里简单介绍一下个人方法吧,主要用到的是路由的 meta 属性以及钩子函数。vue
解决方法:vuex
1.在 router/index.js 中配置路由的权限,使用 meta 属性bash
{
path: '/admin',
name: 'admin',
component: admin,
meta: {
role: 'admin' // 只有权限为 admin 的用户才能访问该路由
}
},
复制代码
2.在 main.js 使用钩子函数函数
router.beforeEach((to, from, next) => { // 在更新路由以前判断是否有 meta 属性
if (to.path === '/') { // 若是是根路由,要单独写一个判断,不然会死循环
next()
}
if (to.meta.role) { // 须要权限的页面
if (to.meta.role === store.state.role) { // 使用 vuex 储存 role
next()
} else { // 权限不够的页面
ElementUI.Message.error('抱歉,您将要访问的页面权限不够!')
console.log('not permission');
next({name: from.name}) // 若是将要访问的页面没有权限,则停留在当前的页面
}
} else { // 不须要权限的页面
next()
}
})
复制代码
ok!~ 大功告成~ spa