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 实现前端权限控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值