vue前端权限控制
2022/4/14 6:15:35
本文主要是介绍vue前端权限控制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
注意:
1. allRoutes是本地定义的所有页面路由;
2. 'index' 是主页路由;
3. menuArr是权限菜单id数组 let menuArr = ['useWaterAdmin', 'dataCenter', 'historyData', 'waterMonitor', ];
4. 后端返回权限格式:
4.1 返回菜单id数组:使用本文方法;
4.2 返回菜单树结构:菜单直接渲染,路由直接addRoute;(返回菜单树的话后端需要维护菜单树,不能解耦,不建议使用);
4.3 返回一维数组的父子菜单树:可以使用本文方法,也可以转成4.2的树结构;
一、按钮权限
1. 使用全局自定义指令,在自定义指令的生命周期里添加置灰样式控制;
2. 在按钮上添加权限方法,配合v-if隐藏按钮,会导致样式错乱,不建议使用;
二、菜单权限:
1. 加载全部菜单,根据权限数组用v-if做显示控制;
2. 根据权限数组过滤出有权限的菜单,只加载有权限的菜单;
function filterMenu(allRoutes) { let resultArr = allRoutes.filter((item) => { if (menuArr.includes(item.name)) { if (item.children) { item.children = filterMenu(item.children); } return item; } }); return resultArr; } // console.log(filterMenu(allRoutes));
三、路由权限
1. 在路由配置中注册全部路由,在路由全局前置守卫router.beforeEach的to中根据权限数组判断没权限的跳404;
2. 只注册有权限的路由:
2.1 先在路由配置中注册全部路由,再根据权限数组删除没权限的路由;
filterRoute('index',allRoutes); function filterRoute(parent, allRoutes) { allRoutes.map((item, index) => { if (menuArr.includes(item.name)) { if (item.children) { filterRoute(item.name, item.children); } } else { router.removeRoute(item.name); } }); } // console.log(router.getRoutes());
2.2 根据权限数组过滤出有权限的路由树,使用addRoute只注册有权限的路由。此处和过滤有权限的菜单一样。
function filterMenu(allRoutes) { let resultArr = allRoutes.filter((item) => { if (menuArr.includes(item.name)) { if (item.children) { item.children = filterMenu(item.children); } return item; } }); return resultArr; } router.addRoute('index', filterMenu(allRoutes)); // console.log(router.getRoutes());
相关文章参考:
如何用 Vue 实现前端权限控制
这篇关于vue前端权限控制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-04React 19 来了!新的编译器简直太棒了!
- 2025-01-032025年Node.js与PHP大比拼:挑选最适合的后端技术进行现代web开发
- 2025-01-03?? 用 Gemini API、Next.js 和 TailwindCSS 快速搭建 AI 推文生成项目 ??
- 2024-12-31Vue CLI多环境配置学习入门
- 2024-12-31Vue CLI学习入门:一步一步搭建你的第一个Vue项目
- 2024-12-31Vue3公共组件学习入门:从零开始搭建实用组件库
- 2024-12-31Vue3公共组件学习入门教程
- 2024-12-31Vue3学习入门:新手必读教程
- 2024-12-31Vue3学习入门:初学者必备指南
- 2024-12-30Vue CLI多环境配置教程:轻松入门指南