gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:37:19 26 4
gpt4 key购买 nike

我有一个 vue项目和 laravel作为 back-end ,我必须检查用户是否有权访问资源或 View ,在后端我使用 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 权限 = localStorage.getItem('permissions');
var can = to.meta.permissions ? (permissions.includes(to.meta.permissions) || to.meta.permissions == '*') : true;

如何才能做到这一点?

最佳答案

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

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

{
path: '/protected',
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');
}
}
}

此守卫将防止进入 /protected网址。在这里你可以检查工作代码笔: https://codepen.io/anon/pen/JwxoMe

以下是所有路由的 aa 守卫示例:
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

关于laravel - Vue-router:如果用户没有权限,则重定向到路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54336173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com