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));
      }
    },

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

相关推荐
小旋风012349 分钟前
封装可拖动弹窗(vue jquery引入到html的版本)
vue.js·html·jquery
旧味清欢|13 分钟前
关注分离(Separation of Concerns)在前端开发中的实践演进:从 XMLHttpRequest 到 Fetch API
javascript·http·es6
gongzemin42 分钟前
React 和 Vue3 在事件传递的区别
前端·vue.js·react.js
-代号95271 小时前
【JavaScript】十四、轮播图
javascript·css·css3
麦麦大数据1 小时前
neo4j+django+deepseek知识图谱学习系统对接前后端分离前端vue
vue.js·django·知识图谱·neo4j·deepseek·在线学习系统
QTX187302 小时前
JavaScript 中的原型链与继承
开发语言·javascript·原型模式
黄毛火烧雪下2 小时前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
三翼鸟数字化技术团队3 小时前
Vue自定义指令最佳实践教程
前端·vue.js
猿榜3 小时前
js逆向-喜某拉雅Xm-Sign参数解密
javascript
转转技术团队3 小时前
代码变更暗藏危机?代码影响范围分析为你保驾护航
前端·javascript·node.js