Vue Router导航守卫解决页面跳转权限问题

需求描述:

我现在开发的项目有一个需求,就是我的网站有两个用户页面,管理员页面和普通用户页面,此时我不仅仅需要判断用户是否登录还要判断用户权限,确认用户能否导航到这个页面。

所以现在Vue的导航守卫就能派上用场了。

我的一贯宗旨,直接上干货!

步骤:

1.在router的index.js中的导航中添加mate关键字

示例:

我的router结构是这样的
  {
    path: '/userIndex',			// 管理员用户后端
    name: 'userIndex',
    meta: {
      requiresAuth: true,			// 判断是否参与登录校验
      requiredRoles: true			// 判断是否参与权限校验
    },
    component: () => import('../views/UserIndex.vue')
  },
  {
    path: '/RegularUserIndex',	//普通用户后端
    name: 'RegularUserIndex',
    meta: {
      requiresAuth: true 			// 判断是否参与登录校验
    },
    component: () => import('../views/RegularUserIndex.vue')
  },

2. 继续在index.js中定义导航守卫

// 导航守卫
router.beforeEach((to, from, next) => {
  // 判断是否需要登录校验
  if (to.matched.some(record => record.meta.requiredRoles)) {
    // 如果用户未登录,重定向到登录页面
    if (!store.state.loginStatus) {
      next('/login');
    } else {
      // 判断权限问题
      if (to.matched.some(record => record.meta.requiredRoles)) {
        console.log(store.state.rank);
        if (store.state.rank == 0 || store.state.rank == 1) {
          next();
        } else {
          next(false);    // 需要和return共同使用
          return
        }
      }
      next(); // 用户已登录,继续导航
    }
  } else {
    next(); // 不需要登录校验,直接导航
  }
});

3. 关键字讲解:

1)to.matched.some(record => record.meta.requiredRoles)

就是跳转到的目录刚刚定义的meta.requiredRoles是否为true,也就是是否定义并参加导航守卫的值守。

2) store.state.loginStatus

这个是我的页面的全局变量中的登陆状态校验变量。我需要判断是否登录,再判断是否放行。

3) store.state.rank

判断用户权限等级问题,只有rank为0/1的才放行

4) next()

next()为router的放行函数,当出现next(),并形参为空时,则不进行阻拦,当我们需要阻拦用户进行跳转时则需要在next()中添加false形参,也就是next(false),注意!一定要配合return;一起使用。这是踩坑点。

踩坑点:

next(false)一定要配合return;一起使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值