gpt4 book ai didi

javascript - 具有用户 Angular 色参数的 Angular2 路由 canActivate 和 AuthGuard (JWT)

转载 作者:IT王子 更新时间:2023-10-29 03:07:34 26 4
gpt4 key购买 nike

在此exaple project通过 JWT 身份验证,我们知道如何只允许经过身份验证的用户访问某些路由:

import { RouterConfig } from '@angular/router';
import { Home } from './home';
import { Login } from './login';
import { Signup } from './signup';
import { AuthGuard } from './common/auth.guard';

export const routes: RouterConfig = [
{ path: '', component: Login },
{ path: 'login', component: Login },
{ path: 'signup', component: Signup },
{ path: 'home', component: Home, canActivate: [AuthGuard] },
{ path: '**', component: Login },
];

我想更进一步,并指出哪些用户 Angular 色可以“访问”路由 - 但我不知道如何将参数传递给 canActivate AuthGuard (src) .所以我想实现这样的目标(例如我有两个 Angular 色:Admin 和 Employee):

  { path: 'home',   component: Home, canActivate: [AuthGuard] },
{ path: 'users', component: AdminUsers, canActivate: [AuthGuard('Admin')] },
{ path: 'users', component: Employees, canActivate: [AuthGuard('Employee')] },

我的 AuthGuard 看起来像这样(其中 userRole(= Admin 或 Employee 或 null) 被传递给 AuthGuard 的参数):

@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}

canActivate(userRole) {
if (!userRole || JWT.user().role == userRole) {
return true;
}

this.router.navigate(['/login']);
return false;
}
}

其中 JWT.user.role 是帮助程序,它读取存储在 JWT token 中的用户 Angular 色。有没有办法做类似上述想法的事情?

最佳答案

你可以像这样设置路由的data参数

const appRoutes: Routes = [
{
path: 'account/super-secure',
component: SuperSecureComponent,
canActivate: [RoleGuard],
data: { roles: ['super-admin', 'admin'] }
}];

然后在 RoleGuardcanActivate 中添加:

canActivate(route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {

let roles = route.data["roles"] as Array<string>;
return (roles == null || roles.indexOf("the-logged-user-role") != -1);
}

我认为这可能是另一种方式,而不是为每个 Angular 色创建守卫。我实际上会采用这种方法,因为它需要更少的代码并且可以很好地处理问题。

关于javascript - 具有用户 Angular 色参数的 Angular2 路由 canActivate 和 AuthGuard (JWT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38402776/

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