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前端权限控制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16Vue3资料:新手入门必读教程
- 2024-11-16Vue3资料:新手入门全面指南
- 2024-11-16Vue资料:新手入门完全指南
- 2024-11-16Vue项目实战:新手入门指南
- 2024-11-16React Hooks之useEffect案例详解
- 2024-11-16useRef案例详解:React中的useRef使用教程
- 2024-11-16React Hooks之useState案例详解
- 2024-11-16Vue入门指南:从零开始搭建第一个Vue项目
- 2024-11-16Vue3学习:新手入门教程与实践指南
- 2024-11-16Vue3学习:从入门到初级实战教程