限制每个角色的路由

时间:2019-01-24 14:25:47

标签: vue.js vue-router

是否可以基于登录用户角色之类的值来限制某些路由和/或更改任何路由的组件?

我希望这样做,以便管理员的默认页面与普通用户不同,但是如果在浏览器中手动设置了路由,也许还会限制访问。

或者将基本组件重定向到另一条路线是更好的解决方案吗?

我知道限制通过路由器的访问并不能取代真实帐户的安全性,但是这似乎是防止用户猜测受限路由的第一步。

1 个答案:

答案 0 :(得分:2)

这是一个使用vue路由器实现身份验证和授权的好例子:https://scotch.io/tutorials/vue-authentication-and-route-handling-using-vue-router

基本上,您可以在允许用户打开受保护的组件之前检查权限。实现此目的的最简单方法是使用路由器防护。在您的路由器定义中:

{
  path: '/proctected',
  beforeEnter(to, from, next) {
    if (isAuthenticated()) {
      if (!hasPermissionsNeeded(to)) {
        next('/page-to-show-for-no-permission');
      } else {
        next();
      }
    } else {
      next('/page-to-show-for-unauthenticated-users');
    }
  }
}

此防护措施将防止输入/proctected网址。在这里,您可以检查有效的Codepen:https://codepen.io/anon/pen/JwxoMe

下面是所有路线的后卫示例:

router.beforeEach((to, from, next) => {
  if (isAuthenticated()) {
    if (!hasPermissionsNeeded(to)) {
      next('/page-to-show-for-no-permission');
    } else {
      next();
    }
  } else {
    next('/page-to-show-for-unauthenticated-users');
  }
})

有关路由器防护的更多信息:https://router.vuejs.org/guide/advanced/navigation-guards.html#per-route-guard