在中后盾利用零碎开发中,大部分状况下会波及到用户权限管制,除了后端做权限验证外,前端在用户拜访时也须要基于用户权限做相应管制。针对前端应用vue框架的状况,对页面一级的权限管制,惯例解决是在页面导航栏通过管制导航显隐管制权限,但在浏览器地址栏输出拜访门路仍然能够拜访,能够用vue-router的动静路由来实现权限管制。

// router.jsimport Vue from 'vue'import Router from 'vue-router'Vue.use(Router)// 默认路由只配置无需权限的页面export default new Router({  mode: 'history',  base: process.env.BASE_URL,  routes: [    {      path: '/',      redirect: '/user/login'    },    {      path: '/user/login',      name: 'login',      component: () => import('@/views/user/Login.vue')    }  ]})

登录胜利后通过addRoutes更新路由配置

import routeConfig from '@/routeConfig'this.$api.user.login({  username,  password}).then(res => {  if(res.data.code === 0) {    // 登录胜利,依据返回权限码配置动静路由    let router = routeConfig();    router.routes.forEach(route => this.$router.options.routes.push(route));    // 必须将路由push到options中才失效    this.$router.addRoutes(router.routes);  }})

失常状况下这样就能够实现动静路由管制了,但刷新页面发现会呈现404,因为刷新时vue实例从新初始化了,导致动静路由被还原成默认路由,此时须要将权限码存储在本地,在main.js中依据权限码从新生成动静路由

// 刷新页面时依据本地缓存从新生成路由if(sessionStorage.getItem('permission')) {  let routerData = routeConfig();  routerData.routes.forEach(route => router.options.routes.push(route));  router.addRoutes(routerData.routes);}

以上步骤根本能够实现动静增加路由并在刷新页面是维持路由状态,但拜访根门路会始终跳转到登录页,无奈默认跳转到首页,这个问题目前还未想到好的解决方案。