Vue路由权限控制有几种方法,分别怎么理解
Admin 2022-07-09 群英技术资讯 359 次浏览
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,其实实现思想都差不多,只是使用接口细节会有少许的不一样,使用对我们来说学习的重点千万不能放在某一个框架上,而是要训练自己的思维
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家介绍了Vue3 中有场景是 reactive 能做而 ref 做不了的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
网上有很多关于深拷贝的文章,但是质量良莠不齐,有很多都考虑得不周到,写的方法比较简陋,难以令人满意。本文旨在完成一个完美的深拷贝,大家看了如果有问题,欢迎一起补充完善。
jquery与javascript如何设置或修改a标签href属性呢?非常的简单,例如小编要修改a标签href属性,将跳转网址改成“www.tpyyes.com”,如下: ahref=www.baidu.comid=myId点击进入百度/a 如果是javascript代码,可以这样写: document.getElementById(myId).se
最终效果展示xhr发起请求!DOCTYPE htmlhtml lang=en head meta charset=UTF-8 meta http-equiv=X-UA-Compatible content=IE=edge meta name=viewport content=width=device-
Vue插槽,是学习vue中必不可少的一节,越来越发现插槽的好用,而过滤数据也是我们日常开发中必然会用到的,这篇文章主要给大家介绍了关于Vue插槽和过滤器的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008