将功能包含在某个功能内

时间:2018-10-24 16:20:13

标签: javascript typescript nestjs

我正在为我的角色保护得到一个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"

1 个答案:

答案 0 :(得分:0)

因此,我发现问题与角色保护代码无关。这样做很好,问题在于角色名称不匹配。我和我的朋友解析了名字,一切正常。我有点不好意思,谢谢您提供的所有帮助。