vue菜单权限

菜单权限控制 ---> 不同权限的用户可访问的页面是不同的 可访问的页面--->路由

路由一般分为 常量路由(所有人都可以访问),动态路由(通过权限控制的路由),任意路由(当访问的路由不存在时,跳转到的页面)

步骤一

  1. 拆分路由,拆为常量路由,异步路由和任意路由

步骤二

1.获取用户信息成功后后台所返回的动态路由

  1. 将异步路由和后台所返回的路由进行比对,过滤,封装成一个函数,
javascript 复制代码
// 用于过滤当前用户需要展示的异步路由
function filterAsyncRoute(asyncRoute: any, routes: any) {
  return asyncRoute.filter((item: any) => {
    // 判断路由表中是否包含异步路由
    if (routes.includes(item.name)) {
      // 判断是否有子路由
      if (item.children && item.children.length > 0) {
        // 递归子路由
        item.children = filterAsyncRoute(item.children, routes);
      }
      return true;
    }
  });
}
  1. 在获取用户信息处调用该函数,并注册新的路由表
javascript 复制代码
 // 获取用户信息
     userInfo() {
      let res = await reUserInfo();
      // console.log(res.data);
      if (res.code == 200) {
        this.username = res.data.name;
        this.avatar = res.data.avatar;
        this.buttons = res.data.buttons;
        // 调用异步路由,计算当前路由所需要的异步路由
        let UserRoute = filterAsyncRoute(
          cloneDeep(asyncRoute),
          res.data.routes
        );
        // 生成新的路由表
        this.menuRoutes = [...contanceRoute, ...UserRoute, anyRoute];
        // 注册路由
        [...UserRoute, anyRoute].forEach((route) => {
          router.addRoute(route);
        });
        //打印当前的全部路由
        // console.log(router.getRoutes());
        return "ok";
      } else {
        return Promise.reject(new Error(res.data.message));
      }
    },

以上即可实现菜单的权限控制

相关推荐
夫琅禾费米线42 分钟前
leetcode2650. 设计可取消函数 generator和Promise
开发语言·javascript·leetcode·ecmascript
独上归州2 小时前
Vue与React的Suspense组件对比
前端·vue.js·react.js·suspense
战族狼魂2 小时前
html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转
javascript·css·html
Komorebi⁼2 小时前
Vue核心特性解析(内含实践项目:设置购物车)
前端·javascript·vue.js·html·html5
明月清风徐徐2 小时前
Vue实训---0-完成Vue开发环境的搭建
前端·javascript·vue.js
MR·Feng2 小时前
使用Electron将vue2项目打包为桌面exe安装包
前端·javascript·electron
萧大侠jdeps2 小时前
图片生成视频-右进
前端·javascript·音视频
CSDN专家-赖老师(软件之家)2 小时前
养老院管理系统+小程序项目需求分析文档
vue.js·人工智能·小程序·mybatis·springboot
Domain-zhuo3 小时前
JS对于数组去重都有哪些方法?
开发语言·前端·javascript
明月清风徐徐3 小时前
Vue实训---2-路由搭建
前端·javascript·vue.js