思考:你现在参与的项目中是如何处理路由和权限映射的?
什么时候用到权限校验呢?比如一个网站有多个页面,但页面的展示与功能是有角色区分的,有些功能仅展示给管理员使用,有些是供用户使用,这就需要使用路由和权限映射实现。
路由处理逻辑如下:
路由场景分析
中后台路由常见的常见如下:
-
已获取 Token:
-
访问 /login:重定向到 /
-
访问 /login?redirect=/xxx:重定向到 /xxx
-
访问 /login 以外的路由:直接访问 /xxx
-
未获取 Token:
-
访问 /login:直接访问 /login
-
访问 /login 以外的路由:如访问 /dashboard,实际访问路径为 /login?redirect=%2Fdashboard,登录后会直接重定向 /dashboard
路由逻辑源码
第一步,main.js 中导入permission.js:
import './permission' // permission control
第二步,permission 定义了全局路由守卫
router.beforeEach(async(to, from, next) => {
// 启动进度条
NProgress.start()
// 修改页面标题
document.title = getPageTitle(to.meta.title)
// 从 Cookie 获取 Token
const hasToken = getToken()
// 判断 Token 是否存在
if (hasToken) {
// 如果当前路径为 login 则直接重定向至首页
if (to.path === '/login') {
next({
path: '/' })
NProgress.done()
} else {
// 判断用户的角色是否存在
const hasRoles = store.getters.roles &&</