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使用自定义指令实现页面底部加水印)
- vue3.0全家桶教程elementui学习(vite+vue3.0+ts+element-plus快速搭建项目的实现)
- 面试问vue掌握程度如何回答(面试最常问的13种Vue修饰符)
- vue 富文本图片上传(vue.js云存储实现图片上传功能)
- vue可以用vite打包吗(vite+vue3+element-plus项目搭建的方法步骤)
- vue各种模块(一篇文章学会Vue中间件管道)
- vuevlog制作软件(Vue实现Dialog封装)
- vue怎么更换自定义水印(Vue之全局水印的实现示例)
- vue3 composition api用法(vue3中provide和inject的使用)
- vue element 表格上拉加载数据(Vue组件库ElementUI实现表格加载树形数据教程)
- 详解从vue的组件传值着手观察者模式(详解从vue的组件传值着手观察者模式)
- 详解Vue3中Teleport的使用(详解Vue3中Teleport的使用)
- vue创建项目同时引入elementui(Vue Element前端应用开发之开发环境的准备工作)
- vue考试链接重置(Vue实现答题功能)
- vue3.0安装element(vue3+electron12+dll开发客户端配置详解)
- vue pdf预览插件(Vue-pdf实现在线预览PDF文件)
- 10句英语常用(英语常用900句)
- 爱情能当饭吃吗(爱情能当饭吃吗说说)
- 白T恤穿法(白t恤)
- 你怎么忘了是说先爱我(你怎么忘了如何爱我)
- 做技术难吗(技术难不难)
- 林心如是谁(林心如是谁演的)
热门推荐
- 服务器怎么创建网站(网站如何选择服务器空间?)
- ecmascript解析(ECMAScript6中Map映射的基本概念与常用方法)
- docker资源隔离的实现方式(docker配置openGauss数据库的方法详解)
- python分析excel基础数据生成报表(Python实现定制自动化业务流量报表周报功能XlsxWriter模块)
- isPrototypeOf和hasOwnProperty的区别
- 无盘服务器配置要求(云服务器配置怎么选)
- 怎么写css效果最好(提高CSS代码效率的编写技巧)
- 云服务器都包括什么(云服务器有什么优势?)
- laravel算法(laravel批量生成假数据的方法)
- python获取企业微信信息(通过shell+python实现企业微信预警)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9