Vue路由器:如果用户没有权限,则重定向到路由

Car*_*zar 0 permissions laravel vue.js vue-router

我有一个vue项目,laravel作为a back-end,我必须检查用户是否具有访问资源或视图的权限,在后端,我使用laravel权限来完成此操作,并且工作正常,我现在遇到的问题在前面结束。

我在登录时获取用户权限并将其保存在上localStorage,现在如果该用户没有权限,该如何阻止用户输入特定路由?

例如我有这些路线

    {
      path: 'users',
      name: 'Users',
      component: Users,
      meta : {
        permissions: 'read_users'
      }
    },
    {
      path: 'roles-permissions',
      name: 'RolesPermissions',
      component: RolesPermissions,
      meta : {
        permissions: 'read_roles'
      }
    },
    {
      path: 'roles-permissions/create',
      name: 'CreateRolesPermissions',
      component: CreateRolesPermissions,
      meta : {
        permissions: 'create_roles'
      }
    },
    {
      path: 'roles-permissions/:id/edit',
      name: 'EditRolesPermissions',
      component: EditRolesPermissions,
      meta : {
        permissions: 'edit_roles'
      }
    },
    {
      path: 'customers',
      name: 'Clientes',
      component: CustomersList
    }
Run Code Online (Sandbox Code Playgroud)

如果用户没有权限,['read_roles','create_roles','edit_roles','read_users']则应将其重定向到customers

var权限= localStorage.getItem('permissions'); var can = to.meta.permissions吗?(permissions.includes(to.meta.permissions)|| to.meta.permissions =='*'):true;

如何才能做到这一点?

Ben*_*n H 5

这是使用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');
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

该保护措施将防止输入 /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');
  }
})
Run Code Online (Sandbox Code Playgroud)

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