我正在使用 Nest JS 开发 Graphql API(我刚刚将其升级到 5.0.0),其中我只需要允许某些用户(按角色)访问公共查询的子部分。
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
@Injectable()
export class RolesGuard implements CanActivate {
constructor(private readonly reflector: Reflector) {}
canActivate(context: ExecutionContext): boolean {
const req = context.switchToHttp().getRequest();
const roles = this.reflector.get<string[]>('roles', context.getHandler());
if (!roles) // if no roles specified
return true;
console.log(req); // Displays Query() parent result instead of HTTP Request Object
return false;
}
}
查询的子部分由@ResolveProperty()
修饰函数处理。
按照我开始使用Guards的文档,但我刚刚发现在使用Guards时,在GraphQL解析器上下文中,context.switchToHttp().getRequest()
它只返回父Query()的结果......
我真的不知道这是否是预期的行为,如果是,是否有办法从 GraphQL Guard 访问完整的 express Request 对象?