我正在使用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,但我发现在使用守卫时,在GraphQL解析器上下文中,context.switchToHttp().getRequest()
只返回父Query()的结果......
我真的不知道这是否是预期的行为,如果是,是否有办法从GraphQL Guard访问完整的Express Request对象?