【发布时间】:2019-03-29 03:37:15
【问题描述】:
我正在为我的角色守卫获取一个 json 对象,并且我正在尝试检查用户是否具有一组角色,其中一个角色位于该操作的接受角色列表中。我的功能设置如下:
export class RoleGuard implements CanActivate{
constructor (private readonly reflector: Reflector, readonly jwtService: JwtService) {}
public canActivate(context: ExecutionContext): boolean {
const roles = this.reflector.get<string[]>('groups', context.getHandler());
if (!roles) {
return true;
}
const request = context.switchToHttp().getRequest();
const user: any = this.jwtService.decode(request.headers.authorization.substr(7), { json: true, complete: true });
// tslint:disable-next-line:ter-arrow-parens
const hasGroup = () => user.payload.groups.some((role: any) => roles.includes(role));
return user && user.payload.groups && hasGroup();
user.payload.groups 是用户拥有的角色数组,“roles”是可以执行操作的接受角色列表。但是,每次程序运行时,即使角色正确,它也会失败。这里发生了什么我没有看到的事情?我从 nestjs 网站的文档中得到这个:https://docs.nestjs.com/guards
组对象示例:
Array(3) ["role1", "role2", "role3"]
length:3
__proto__:Array(0) [, …]
0:"role1"
1:"role2"
2:"role3"
角色对象示例:
Array(2) ["role4", "role3"]
length:2
__proto__:Array(0) [, …]
0:"role4"
1:"role3"
【问题讨论】:
-
这两个数组只包含字符串还是角色对象?可能,您是在比较对象而不是字符串。
-
感谢您提出问题!由于您遇到代码问题,请查看minimal reproducible example 的构成,以便您获得有意义的答案。
-
您能否提供一个
role对象的示例 -
你肯定面临另一个问题。
-
不要编辑您的问题,而是发布您的解决方案作为答案并接受它,以便其他人可以看到您的问题已解决。 :-)
标签: javascript typescript nestjs