Как добавить собственные директивы схемы Spring Boot GraphQL APP - PullRequest
0 голосов
/ 03 декабря 2018

Я создал клиент SchemaDirective и пытаюсь зарегистрировать его в своем приложении Spring Boot, которое использует

    <dependency>
        <groupId>com.graphql-java</groupId>
        <artifactId>graphql-spring-boot-starter</artifactId>
        <version>5.0.2</version>
    </dependency>

и GraphQLQueryResolver

открытый класс AuthorisationDirective реализует SchemaDirectiveWiring {

@Override
public GraphQLFieldDefinition onField(SchemaDirectiveWiringEnvironment<GraphQLFieldDefinition> schemaDirectiveWiringEnv) {
    String targetAuthRole = (String) schemaDirectiveWiringEnv.getDirective().getArgument("role").getValue();

    GraphQLFieldDefinition field = schemaDirectiveWiringEnv.getElement();
    //
    // build a data fetcher that first checks authorisation roles before then calling the original data fetcher
    //
    DataFetcher originalDataFetcher = field.getDataFetcher();
    DataFetcher authDataFetcher = new DataFetcher() {
        @Override
        public Object get(DataFetchingEnvironment dataFetchingEnvironment) throws Exception {
            Map<String, Object> contextMap = dataFetchingEnvironment.getContext();
            //AuthorisationCtx authContext = (AuthorisationCtx) contextMap.get("authContext");

            if ("dev".equals(targetAuthRole)) {
                return originalDataFetcher.get(dataFetchingEnvironment);
            } else {
                return "Un-Authorized";
            }
        }
    };
    //
    // now change the field definition to have the new authorising data fetcher
    return field.transform(builder -> builder.dataFetcher(authDataFetcher));
}

Ниже работает, но так как я использую GraphQLQueryResover, у меня нет созданных DataFetchers

private RuntimeWiring buildRuntimeWiring() {
    return RuntimeWiring.newRuntimeWiring().directive("auth", new AuthorisationDirective())
            .type("Query", typeWiring -> typeWiring
                    .dataFetcher("allBooks", allBooksDataFetcher)
                    .dataFetcher("book", bookDataFetcher))
            .build();
}

Пожалуйста, помогите, как зарегистрировать его в Springboot.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...