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 为什么使用虚拟dom(Vue虚拟Dom到真实Dom的转换)
- vueweb端聊天(Vue实现聊天界面)
- 小白vue教学(尤大大新活petite-vue的实现)
- vue3.0 如何使用useroute(详解vue3中setUp和reactive函数的用法)
- vue商城购物车数据(vue实现购物车全部功能的简单方法)
- vue的修饰符都有哪些(详解Vue的sync修饰符)
- vue统计代码行数(vue实现计数器简单制作)
- vue请求token无效(关于Vue 消除Token过期时刷新页面的重复提示问题)
- vue实现聊天(Vue+ssh框架实现在线聊天)
- vue计算两个日期差几分钟(vue实现同时设置多个倒计时)
- vue重置密码(Vue 两个字段联合校验之修改密码功能的实现)
- vue数据改变页面不刷新(vue列表数据删除后主动刷新页面及刷新方法详解)
- icon图标怎么引入vue(vue引入iconfont图标库的优雅实战记录)
- vue接口请求类封装(Vue接口封装的完整步骤记录)
- vue3.0零基础入门(快速掌握Vue3.0中如何上手Vuex状态管理)
- vue滚动条下拉翻页(Vue中利用better-scroll组件实现横向滚动功能)
- 融入小人物的喜怒哀乐,黄渤饰演的角色为什么让人观看时欲罢不能(融入小人物的喜怒哀乐)
- 《极限挑战》深访都市夜归人,夜间打工者体验,黄磊录完憔悴了(极限挑战深访都市夜归人)
- Google 推出了一个游戏生成器,让不会编程的你也能自己设计游戏(推出了一个游戏生成器)
- 二胎家庭老大爱闹情绪,用这招很有效(二胎家庭老大爱闹情绪)
- 一个30岁男人外遇失败的全过程(一个30岁男人外遇失败的全过程)
- 《无敌破坏王2》 不聊彩蛋,聊聊我从动画里看到的现实那些事儿(无敌破坏王2不聊彩蛋)
热门推荐
- dedecms如何使用标签(DEDECMS副栏目代码)
- jQuery toggleClass
- pandas如何指定空数据类型(解决Pandas的DataFrame输出截断和省略的问题)
- vue动态生成的下拉框如何获取值(Vue 级联下拉框的设计与实现)
- dedecms调用logo标签(DedeCMS 5.7 tag标签长度限制的修改方法)
- dedecms标签使用(DEDECMS 自动缩略图无法生成问题的解决方法)
- javascript如何跨域
- php单例设计方法(php设计模式之单例模式用法经典示例分析)
- python实现将txt转化为excel(python实现Excel文件转换为TXT文件)
- HTML中h1到h6标签
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9