Чтобы посетить объекты (вы правы, Query is) используйте visitObject
, а для конкретного API-интерфейса (любой метод в Query) используйте visitFieldDefinition
Я реализовал это следующим образом,
class authDirective extends SchemaDirectiveVisitor {
visitObject(type) {
this.ensureFieldsWrapped(type);
type._requiredAuthRole = this.args.requires;
}
visitFieldDefinition(field, details) {
this.ensureFieldsWrapped(details.objectType);
field._requiredAuthRole = this.args.requires;
}
ensureFieldsWrapped(objectType){
const fields = objectType.getFields();
//your logic to resolve directive
}
}
module.exports = authDirective;
В графе SQL Shema
directive @authorization(requires: Role) on OBJECT | FIELD_DEFINITION
В состав компоновщика схем или сервера входит
resolvers,
schemaDirectives: {
authorization: authDirective
}