当前位置: 首页 > news >正文

前端根据权限生成三级路由

三级菜单和后端返回数组对比获取有权限的路由
数组:

//后端返回的数组
const arr1 = ['sale.management', 'sale.order', 'sale.detail'];
//前端路由
const arr2 = [{path: "/sale-manage",redirect: "/sale-manage/sale-order/sale-list",name: 'saleManage',component: 'Layout',meta: {title_zh: '销售管理',icon: 'i_dingdanguanli',auth: ['sale.management'],},children: [{path: "sale-order",redirect: "/sale-manage/sale-order/sale-list",name: "saleOrder",meta: {title_zh: '销售订单',auth: ['sale.order'],},children: [{path: "sale-list",name: "saleList",component: () => import("../views/saleList/sale-list.vue"),meta: {title_zh: '销售订单',auth: ['sale.list'],},},{path: "sale-detail",name: "saleDetail",component: () => import("../views/saleList/sale-detail.vue"),hidden: true,meta: {title_zh: '销售订单详情',auth: ['sale.detail'],},},{path: "purchasing-agent-list",name: "purchasingAgentList",component: () => import("../views/saleList/11.vue"),meta: {title_zh: '111',auth: ['11.list'],},},{path: "purchasing-agent-detail",name: "purchasingAgentDetail",component: () => import("../views/saleList/11detail.vue"),hidden: true,meta: {title_zh: '11详情',auth: ['11.detail'],},},],},]},
];
// 筛选有权限的路由
function filterItems(items, authArr) {const filteredItems = items.filter((item) => {if (!item.hidden) {const auth = item.meta && item.meta.auth && item.meta.auth[0]return authArr.includes(auth);}});if (filteredItems.length === 0) {return [];}filteredItems.forEach((item) => {if (item.children && item.children.length > 0) {item.children = filterItems(item.children, authArr);}});return filteredItems;
}class authRoutes {constructor(routesList, authArr) {this.routesList = routesListthis.authArrFilter = authArrthis.routesAuthArr = []}filterRoutesArray(routesList, authArr) {this.authArrFilter = authArr.map((item) => item.path)this.routesAuthArr = filterItems(routesList, this.authArrFilter)}
}export default authRoutes

使用:

const authRoutesObj = new authRoutes(arr1 , arr2 )
authRoutesObj.filterRoutesArray(routes, res)
console.log(authRoutesObj.routesAuthArr)

根据权限拦截路由

router.beforeEach((to, from, next) => {window.scrollTo(0, 0); // 跳转页面后 滚动条默认置顶const token = Core.Data.getToken();const loginType = Core.Data.getLoginType();NProgress.start();if (to.meta.title) {const lang = Core.Data.getLang();document.title = 'EOS' + ' | ' + (lang === 'zh' ? to.meta.title : to.meta.title_en);}if (inWhiteList(to.path)) {if (to.path === '/') next('/login');next();NProgress.done();return;}if (!token) {// 没登录message.info('请先登录');NProgress.done();next('/login');} else {// 已登录const roles = to.meta.roles;if (roles) {// 如果进入的路由meta中有roles规则if (roles.includes(loginType)) {next();} else {// 表前userType禁止访问message.warning('当前身份无法访问');next('/');NProgress.done();}} else {// 没有roles规则直接放行next();}}
});

相关文章:

  • Linux | grep命令和 find命令有什么区别
  • 齐普夫定律在循环神经网络中的语言模型的应用
  • 6.17作业
  • Spring Boot高级配置与自定义Starter详解
  • 哪个充电宝牌子好用又实惠?盘点四大平价充电宝分享
  • YOLOv10涨点改进:改进检测头(Partial_C_v10Detect)检测头结构创新,实现涨点
  • 微信小程序录音机源代码
  • 中标新领域!亚信科技+用友网络,将助力广西某市城投集团玩转“人事”
  • 【Linux】版本
  • MySQL中的一行记录是怎么存储的
  • 【QT5】<重点> QT串口编程
  • Java 和 Kotlin Lambda 表达式详解
  • vue简介实例
  • 第二十七章HTML.CSS综合案例(三)
  • react中useEffect函数的详细用法
  • Angular2开发踩坑系列-生产环境编译
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ES10 特性的完整指南
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript-Array类型
  • Java编程基础24——递归练习
  • JS 面试题总结
  • JS笔记四:作用域、变量(函数)提升
  • KMP算法及优化
  • k个最大的数及变种小结
  • Lsb图片隐写
  • Spark RDD学习: aggregate函数
  • Spring核心 Bean的高级装配
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 开发基于以太坊智能合约的DApp
  • 如何实现 font-size 的响应式
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 收藏好这篇,别再只说“数据劫持”了
  • 微信小程序--------语音识别(前端自己也能玩)
  • 我的zsh配置, 2019最新方案
  • 系统认识JavaScript正则表达式
  • 写给高年级小学生看的《Bash 指南》
  • 正则表达式小结
  • 智能合约Solidity教程-事件和日志(一)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • scrapy中间件源码分析及常用中间件大全
  • 仓管云——企业云erp功能有哪些?
  • ​渐进式Web应用PWA的未来
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ‌JavaScript 数据类型转换
  • #pragam once 和 #ifndef 预编译头
  • #图像处理
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)c#+winform实现远程开机(广域网可用)