2024年最全Vue路由权限控制_vue菜单权限被取消后 ,跳转什么界面(1),2024年最新32岁的程序员被裁

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

})

//假设通过接口从后台获取的用户角色,可以存储在token中
const role = ‘user’

myRouter.beforeEach((to,from,next)=>{
if(to.meta.roles.includes(role)){
next() //放行
}else{
next({path:“/404”}) //跳到404页面
}
})


###### 示例二:在需要加权限的meta中加标识



const myRouter = new VueRouter({
routes: [{
path: ‘/login’,
name: ‘login’,
meta: {
title: ‘登录页’
icon: ‘login’
},
component: () => import(‘@/components/Login’)
},{
path: ‘/home’,
name: ‘home’,
meta: {
title: ‘首页’
icon: ‘home’,
requireAuth: true
},
component: () => import(‘@/views/Home’)
},{
path: ‘/404’,
component: () => import(‘@/components/404’)
}]
})

myRouter.beforeEach((to,from,next)=>{
let flag = to.matched.some(record=>record.meta.requireAuth);
//这里使用matched循环查找不直接使用to.meta的原因:
//当存在子路由的情况时,首先明确按正常点击逻辑来说是先走一级路由再进二级路由的,对于权限的判断也必然是这样
//to.meta => 会直接搜索子路由的meta,如果一级路由没有添加requireAuth:true, 则在一级路由页面也本就应该被拦截无法进入二级路由页面了;如果用户直接篡改url地址栏的话,则可以进入二级页面,权限可能会出现问题。则应该给该权限下面的路由都添加标记
//to.matched => matched是一个路由数组,会将所有路由包括子路由的属性集合起来,所以通过循环判断查找的方式,只需要给一级路由添加权限标识即可权限他下面的其他子路由。
if(flag){
next()
}else{
next({path:“/404”})
}
})


**缺点:** 每次路由跳转都要做一遍校验是对计算资源的浪费,另外对于用户无权访问的路由,理论上就不应该挂载。


### 方式二:动态生成路由表(addRoutes)


根据用户权限或者是用户属性去动态的添加菜单和路由表,可以实现对用户的功能进行定制。


`vue-router` 提供了 `addRoutes()` 方法,可以动态注册路由,需要注意的是,动态添加路由是在路由表中 `push` 路由,由于路由是按顺序匹配的,因此需要将诸如404页面这样的路由放在动态添加的最后。



// store.js
// 将需要动态注册的路由提取到vuex中
const dynamicRoutes = [
{
path: ‘/manage’,
name: ‘Manage’,
meta: {
requireAuth: true
},
component: () => import(‘./views/Manage’)
},
{
path: ‘/userCenter’,
name: ‘UserCenter’,
meta: {
requireAuth: true
},
component: () => import(‘./views/UserCenter’)
}
]


在 `vuex` 中添加 `userRoutes` 数组用于存储用户的定制菜单。在 `setUserInfo` 中根据后端返回的菜单生成用户的路由表。



// store.js
setUserInfo (state, userInfo) {
state.userInfo = userInfo
state.auth = true // 获取到用户信息的同时将auth标记为true,当然也可以直接判断userInfo
// 生成用户路由表
state.userRoutes = dynamicRoutes.filter(route => {
return userInfo.menus.some(menu => menu.name === route.name)
})
router.addRoutes(state.userRoutes) // 注册路由
}

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值