首页 > 解决方案 > 在某个函数中包含函数

问题描述

我正在为我的角色守卫获取一个 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"

标签: javascripttypescriptnestjs

解决方案


所以我发现这个问题与角色保护代码无关。工作正常,问题在于角色名称不匹配。我和我的朋友解决了名称,一切正常。我有点尴尬,感谢您提供的所有帮助。


推荐阅读