utils->frame->vue->路由导航守卫


//beforeEach,beforeResolve,afterEach合称路由守卫
router.beforeEach(async (to, from, next) => {

  NProgress.start();

  document.title = getPageTitle(to.meta.title);
  const hasRoles =
    store.getters.roles && store.getters.roles.length > 0;
  console.log("\n是否需要登录:" + configParam.loginSwitch);


  if (configParam.loginSwitch) {

    console.log("\n目标网页是否在白名单之中:" + (whiteList.indexOf(to.path) !== -1));
    if (whiteList.indexOf(to.path) !== -1) {
      next();
      NProgress.done();
    } else {

      const hasToken = getToken();
      console.log(
        "\n判断Token是否存在,即用户买了通行证?" +
        (hasToken ? true : false)
      );
      console.log("\n" + hasToken ? "token值为" + hasToken : "");
      if (hasToken) {

        console.log("\n是否需要验证用户权限:" + configParam.rolesVerifySwitch);
        if (configParam.rolesVerifySwitch) {



          if (hasRoles) {

            console.log("存在用户权限");
            next();
            NProgress.done();
          } else {
            console.log("不存在用户权限,重新请求用户权限");
            try {
              const {
                roles
              } = await store.dispatch("user/getInfo");

              const accessRoutes = await store.dispatch(
                "permission/generateRoutes",
                roles
              );
              router.addRoutes(accessRoutes);
              next({
                ...to,
                replace: true
              });
              NProgress.done();
            } catch (error) {
              // remove token and go to login page to re-login
              await store.dispatch("user/resetToken");
              Message.error(error || "Has Error");
              next(`/login?redirect=${to.path}`);
              NProgress.done();
            }
          }
        } else {
          console.log("\n不需要验证用户权限,直接给与最高权限admin");
          if (hasRoles) {
            console.log("存在最高用户权限");
            next();
            NProgress.done();
          } else {
            const {
              roles
            } = await store.dispatch("user/getInfo", {tyep:"highest"});
            const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
            router.addRoutes(accessRoutes)
            next({
              ...to,
              replace: true
            });
            NProgress.done();
          }

        }
      } else {
        next(`/login?redirect=${to.path}`);
        NProgress.done();
      }
    }
  } else {
    console.log("\n不需要登录,没有任何限制,直接给与最高权限admin");


    if (hasRoles) {
      console.log("存在最高用户权限");
      next();
      NProgress.done();

    }else{
      const {
        roles
      } = await store.dispatch("user/getInfo", {type:"highest"});
      const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
      router.addRoutes(accessRoutes)
      next({
        ...to,
        replace: true
      });
      NProgress.done();
    }
  }
});

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值