
前端权限控制-基于vue-router的动态路由实现
发布日期:2021-05-09 07:42:40
浏览次数:10
分类:博客文章
本文共 1260 字,大约阅读时间需要 4 分钟。
转:
在中后台应用系统开发中,大部分情况下会涉及到用户权限控制,除了后端做权限验证外,前端在用户访问时也需要基于用户权限做相应控制。针对前端使用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);}
以上步骤基本可以实现动态添加路由并在刷新页面是维持路由状态,但访问根路径会始终跳转到登录页,无法默认跳转到首页,这个问题目前还未想到好的解决方案。
转:
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月22日 19时56分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
业务工作流平台设计(七)
2019-03-06
业务工作流平台设计(八)
2019-03-06
SpringBoot Web(SpringMVC)
2019-03-06
javascript 之对象-13
2019-03-06
解决:angularjs radio默认选中失效问题
2019-03-06
java按照关键字指定的key删除redis(支持模糊删除)
2019-03-06
Jmeter-ForEach控制器
2019-03-06
windows环境下安装zookeeper(仅本地使用)
2019-03-06
Docker学习(十三)- docker rm 命令详解
2019-03-06
解决Eclipse左键无法查看maven第三方包的源代码,多图亲测可用【转】
2019-03-06
selnium远程机上传图片遇到的坑
2019-03-06
(转)在ASP.NET 中实现单点登录(利用Cache, 将用户信息保存在服务器缓存中)
2019-03-06
权限管理系统系列之序言
2019-03-06
微信小程序setData子元素
2019-03-06
查看已经开放的端口,查看和清理tomcat日志文件
2019-03-06
数据泵使用NETWORK_LINK不落地导入数据
2019-03-06
实验之-----------修改oracle实例名
2019-03-06
Oracle text组件安装
2019-03-06