vue-router根据用户权限配置菜单

业务逻辑

比如有个系统有两个角色,普通用户和管理者,普通用户登录后可以看到模块A,管理者登录后可以看到模块B。
技术实现逻辑:用户登录后,后台判断用户的角色是普通用户还是管理者,于是根据角色返回菜单权限,前端根据后台提供的菜单权限,动态配置路由。用户看到的模块都是符合该用户角色的内容

用到的技术

  • vue-rouer:router.beforEach,next()
  • filter
  • vuex

遇到的问题

为什么会进入无限循环?

例如下面的例子(会使得系统进入无限循环)

router.beforeEach((to,form,next)=>{
  if(用户已经登陆){
    if(第一次进入){
         将第一次进入的变量做个标记;
         动态添加路由;
    }
     next();
  }else{
     //如果用户没有登陆
     next('/login');
  }
}

其实导致会进入无限循环的结果是因为对vue-router文档next()的解释不理解,以为next(‘指定到想去的地方路径’)就可以安全到达了,其实不是next传入的参数里面有路径的时候,会一直进入跳转这个操作。为什么呢,为什么呢,文档其实写的很明显了,是由于知识储备不够,对文档里的专业名词不敏感而忽略了这几个词的重要意义!!!!!!!

在这里插入图片描述
文档说的守卫是异步解析执行,提示了异步解析执行需要使用resolve才能结束等待状态,而结束这一状态的方法,只有next();不传参数的时候才有resolve.所以要防止进入无限循环,就要知道什么情况下使用next();

为什么有时使用next(),有时使用next(’/’)或next({…to})?

借助上面的图
已知next()是可以结束跳转这个操作的,场景:小义的目标:进入地铁站坐上地铁,于是小义进入地铁站,拿出地铁卡(相等于用了next()),可以进入地铁站。完成了目标结束了这个操作。如下时序图:

地铁站 拿出地铁卡,进站坐地铁 地铁站

next(’/’)或next({…to})是跳转到指定的地址,场景:小义目标:进入地铁站坐上地铁,但是小义去到地铁站后,忘记拿地铁卡,于是回家去找地铁卡,回到家没找到,于是想到可以使用手机登录地铁app可以扫码二维码进入,于是又回到地铁站,但是回到地铁站后,发现手机没电了,小义又回家继续找地铁卡,就这样来回反复,没有地铁卡(next())就是进不来地铁站坐上地铁,完成不了目标。如下时序图:

地铁站 去坐地铁 回家找地铁卡 没有找到卡,想起可以手机扫码进站 手机没电,折回家继续找卡 无限来回折返 无限来回折返 地铁站

前端开发简单的逻辑路由守卫里权限配置逻辑

router.beforeEach((to,form,next)=>{
  if(用户已经登陆){
    if(第一次进入){
         将第一次进入的变量做个标记;
         动态添加路由;
         next('去到对应角色模块');
    }else{
    //防止进入无限循环,符合条件后,使用next()告知结束跳转行为。
         next();
    }
    
  }else{
     //如果用户没有登陆,去到登录页
     if(如果没有登录且获得的目标路由to.path等于登录页){
        next('/login');
     }else{
       // 得知获取的目标路由to.path是去登陆页,就执行中止跳转的操作
        next();
     }
     
  }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值