vue前端权限控制

注意:

 1. allRoutes是本地定义的所有页面路由;

 2. 'index' 是主页路由;

 3. hasMenuArr是权限菜单id数组 let hasMenuArr = ['useWaterAdmin', 'dataCenter', 'historyData', 'waterMonitor', ];

 4. 后端返回权限格式:

  4.1 返回菜单id数组:先过滤出有权限的菜单路由,再渲染菜单注册路由;(前端需要维护保存菜单树,后端不需要维护菜单树,建议使用);

  4.2 返回菜单树结构:直接渲染菜单注册路由;(前端不需要维护保存菜单树,后端需要维护菜单树,不够解耦,不建议使用);

一、按钮权限

  1. 使用全局自定义指令,在自定义指令的生命周期里添加置灰样式控制;

  2. 在按钮上添加权限方法,配合v-if隐藏按钮,会导致样式错乱,不建议使用;

二、菜单、路由权限

  1. 只加载有权限的菜单、路由

    注意: 1. 建议使用此方法统一处理菜单、路由,后端返回菜单id数组的话需要先过滤出有权限的菜单路由,后端返回菜单树的话不需要过滤,菜单直接渲染,路由遍历时addRoute;

function filterMenu(allRoutes) {
  let resultArr = allRoutes.filter((item) => {
    if (hasMenuArr.includes(item.name)) {
      if (item.children) {
        item.children = filterMenu(item.children);
      }
      return item;
    }
  });
  return resultArr;
}
//渲染菜单 export const menuArr
= filterMenu(allRoutes);
// console.log(menuArr);
//添加路由
menuArr.map((item)=> {
 router.addRoute(
'index', item);
})
// console.log(router.getRoutes());

  2. 加载全部菜单、路由

    1. 加载全部菜单,根据权限数组用v-if做显示控制;

    2. 注册全部路由(路由配置项中注册),在路由全局前置守卫router.beforeEach的to中根据权限数组判断没权限的跳404;

 

 

    

相关文章参考:

如何用 Vue 实现前端权限控制

posted @ 2022-04-14 11:18  考拉很OK  阅读(357)  评论(0编辑  收藏  举报