代码之家  ›  专栏  ›  技术社区  ›  Carlos Salazar

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

  •  0
  • Carlos Salazar  · 技术社区  · 6 年前

    我有一个 vue 项目和 laravel 作为一个 back-end ,我必须检查在我使用的后端系统中,用户是否具有访问资源或视图的权限。 laravel permissions 为了做到这一点,而且工作得很好,我现在遇到的问题是在前端。

    我获取用户登录时的权限并将其保存在 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
        }
    

    如果用户在 ['read_roles','create_roles','edit_roles','read_users'] 她应该转到 customers .

    var permissions=localstorage.getitem('permissions'); var can=to.meta.permissions?(permissions.includes(to.meta.permissions)to.meta.permissions='*'):真;

    怎么能做到?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Beniamin H Sai Sudha    6 年前

    下面是使用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 网址。您可以在这里检查工作代码笔: 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