vue动态路由实现权限控制(vue2/vue3路由权限管理的方法实例)
vue动态路由实现权限控制
vue2/vue3路由权限管理的方法实例1. Vue 路由权限控制一般有2种方法
a、路由元信息(meta)
b、动态加载菜单和路由(addRoutes)
2 路由元信息(meta)来进行路由权限控制
2.1 在vue2种的实现
如果一个网站有不同的角色,比如 管理员 和 普通用户 ,要求不同的角色能访问的页面是不一样的
这个时候我们就可以 把所有的页面都放在路由表里 ,只要 在访问的时候判断一下角色权限 。如果有权限就让访问,没有权限的话就拒绝访问,跳转到404页面
vue-router 在构建路由时提供了元信息 meta 配置接口,我们可以在元信息中添加路由对应的权限,然后在路由守卫中检查相关权限,控制其路由跳转。
可以在每一个路由的 meta 属性里,将能访问该路由的角色添加到 roles 里。用户每次登陆后,将用户的角色返回。然后在访问页面时,把路由的 meta 属性和用户的角色进行对比,如果用户的角色在路由的 roles 里,那就是能访问,如果不在就拒绝访问。
以下是vue2的实现方式:
import VueRouter from 'vue-router'; Vue.use(VueRouter) ... routes: [ { path: '/login', name: 'login', meta: { roles: ['admin', 'user'] }, component: () => import('../components/Login.vue') }, { path: 'home', name: 'home', meta: { roles: ['admin'] }, component: () => import('../views/Home.vue') }, ] const router = new VueRouter({ routes }) export default router
在app.vue文件下引入,注册全局的路由守卫
//假设有两种角色:admin 和 user //从后台获取的用户角色 const role = 'user' //当进入一个页面是会触发导航守卫 router.beforeEach 事件 router.beforeEach((to,from,next)=>{ if(to.meta.roles.includes(role)){ next() //放行 }esle{ next({path:"/404"}) //跳到404页面 } })
自此基本上路由的权限控制就完成了
题外话 在路由守卫中也能很好的解决匹配不到路由转404页面的业务需求,实现如下:
import router from ‘./router‘ router.beforeEach((to, from, next) => { // ... if (to.matched.length === 0) { next('/404') } else { next() } //console.log(to, from, next, '路由守卫') })
2.2 在vue3种的实现
其实思路都是差不多的,只是要注意的是vue3中使用路由的方式和vue2有一些细微的差异,使用我用更简单的404去创建vue3的实例,关于vue3的路由权限控制可以按vue2和下面代码依葫芦画瓢,实现代码如下:
创建路由:
import { createRouter, createWebHashHistory } from 'vue-router'; ... routes: [ { path: '/login', name: 'login', meta: { roles: ['admin', 'user'] }, component: () => import('../components/Login.vue') }, { path: 'home', name: 'home', meta: { roles: ['admin'] }, component: () => import('../views/Home.vue') }, ] const router = createRouter({ history: createWebHashHistory(), routes: routers }) export default router;
路由守卫(在App.vue里面进行全局注册):
import { useRouter } from 'vue-router'; export default { name: 'App', setup() { const router = useRouter(); router.beforeEach((to, from, next) => { // ... if (to.matched.length === 0) { next('/404') } else { next() } }) } }
4 . 动态加载菜单和路由(addRoutes)
根据用户权限或者是用户属性去动态的添加菜单和路由表,可以实现对用户的功能进行定制,vue-router 提供了 addRoutes() 方法,可以动态注册路由, 需要注意的是,动态添加路由是在路由表中 push 路由,由于路由是按顺序匹配的,因此需要将诸如404页面这样的路由放在动态添加的最后
5.总结
不管是vue2还是vue3,其实实现思想都差不多,只是使用接口细节会有少许的不一样,使用对我们来说学习的重点千万不能放在某一个框架上,而是要训练自己的思维
到此这篇关于vue2/vue3路由权限管理的文章就介绍到这了,更多相关vue路由权限管理内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- vue怎么更换自定义水印(Vue之全局水印的实现示例)
- vue验证码怎么用(vue验证码组件使用方法详解)
- 使用vue-cli构建electron项目(MAC+PyCharm+Flask+Vue.js搭建系统)
- vue怎么在中间加图片(Vue实现多图添加显示和删除)
- vue常用的指令和修饰符(Vue中 Vue.prototype使用详解)
- vuex中action的值怎么接(vuex中Getter的用法详解)
- vue插槽实例(Vue中插槽slot的使用方法与应用场景详析)
- vuex原理及使用方法(Vuex状态机的快速了解与实例应用)
- vue怎么定义router的动态路由(vue.js Router中嵌套路由的实用示例)
- vue elementui侧边栏怎么切换页面(Vue + element实现动态显示后台数据到options的操作方法)
- 数组循环遍历展示vue(Vue中foreach数组与js中遍历数组的写法说明)
- vue的弹框怎么用(vue自定义弹框效果确认框、提示框)
- vue 设置头部可以左右滑动(vue实现左右滑动效果实例代码)
- vue路由有几种实现模式(Vue实现路由过渡动效的4种方法)
- vue动态列表布局(vue项目实现左滑删除功能完整代码)
- vue组件详解(Vue的方法和属性案例详解)
- 官宣 全椒籍明星许海峰 奚秀兰 方芳 王璐瑶携手回家 走太平(全椒籍明星许海峰)
- 以前全椒人是怎么过冬的 满满都是回忆(以前全椒人是怎么过冬的)
- NVIDIA显卡份额冲上88 A饭发愁 游戏优化恐没A卡份了(NVIDIA显卡份额冲上88A饭发愁)
- AMD YES A卡还是N卡 A卡和N卡的区别(AMDYESA卡还是N卡)
- 以后显卡多了一个新选择,N卡和A卡外又多了个I卡(以后显卡多了一个新选择)
- 读卖乐园的彩灯(读卖乐园的彩灯)
热门推荐
- centos6.5 32位安装gitlab(centos7安装部署gitlab服务器的方法)
- python3web编程基础教程(python初学者,用python实现基本的学生管理系统python3代码实例)
- html5长按动画效果(HTML5自定义元素播放焦点图动画的实现)
- python线程池如何实现同步(Python mutiprocessing多线程池pool操作示例)
- 存储过程中如何使用事务
- mysql实用教程(Mysql调优Explain工具详解及实战演练推荐)
- php7优化技巧(php7性能提升的原因详解)
- python进度条怎么实现(Python小进度条显示代码)
- phpstudy创建网站教程交流(phpStudy V8中创建与管理站点图文教程)
- html5 canvas绘图(使用html5 canvas绘制圆环动效)