Я нахожусь в процессе разработки API-интерфейса Graphql с Nest JS (я только что обновил его до 5.0.0), в котором мне нужно разрешить только определенным пользователям (по ролям) доступ к частям запросов, которыеpublic.
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, но я только что обнаружил, что при использовании guard, вВ контексте распознавателя GraphQL context.switchToHttp().getRequest()
возвращает только результат родительского Query () ...
Я действительно не знаю, является ли это ожидаемым поведением, и если это так, если есть способполучить доступ к полному объекту экспресс-запроса из GraphQL Guard?