Горячий получить созданный, обновленный и владелец поля из AWS Усилить сгенерированные документы GraphQL? - PullRequest
0 голосов
/ 03 января 2019

Я использовал AWS Amplify для создания GraphQL API. В DynamoDB поля, созданные At, updatedAt и owner, создаются автоматически. Из коробки у меня нет способа получить значения для этих полей. Теперь, когда я добавлю эти поля в аннотированную схему, я смогу получить значения, но все, у кого есть права на запись, могут просто перезаписать их, что раздражает поля времени и создает угрозу безопасности для поля владельца.

Так как мне получить эти значения?

Это конкретный вопрос AWS-Amplify. Дело не в том, как сделать это с помощью стандартного GraphQL. Это очень конкретно о том, как сделать это с помощью модуля API AWS-Amplify и их (к сожалению, очень ограниченных) директив (https://aws -amplify.github.io / docs / js / api # using-graphql-transformers ).

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Чтобы получить эти данные, вы должны иметь какой-то соответствующий тип и запрос в Схеме.

Я знаю, вы упомянули, что вы не хотели бы иметь их в Схеме по причинам, связанным с безопасностью.риск, но в действительности любое поле, имеющееся в вашей схеме, открыто для редактирования для всех, кто имеет доступ к API.

Я бы предложил вашим разработчикам, работающим над проектом, использовать новую среду с использованием новой Multi.Поддержка среды от CLI Amplify для того, чтобы иметь отдельный API, который не выставляется в производство, чтобы предотвратить проблемы с критическими изменениями в вашей главной схеме.

0 голосов
/ 13 июня 2019

Вы должны переопределить создание распознавателя следующим образом:

Вместо:

## [Start] Prepare DynamoDB PutItem Request. **
$util.qr($context.args.input.put("createdAt", $util.defaultIfNull($ctx.args.input.createdAt, $util.time.nowISO8601())))
$util.qr($context.args.input.put("updatedAt", $util.defaultIfNull($ctx.args.input.updatedAt, $util.time.nowISO8601())))

Вы должны:

## [Start] Prepare DynamoDB PutItem Request. **
$util.qr($context.args.input.put("createdAt", $util.time.nowISO8601()))
$util.qr($context.args.input.put("updatedAt", $util.time.nowISO8601()))

В преобразователе обновлений

Вместо:

## Automatically set the updatedAt timestamp. **
$util.qr($context.args.input.put("updatedAt", $util.defaultIfNull($ctx.args.input.updatedAt, $util.time.nowISO8601())))

Вы должны:

## Automatically set the updatedAt timestamp. **
$util.qr($context.args.input.put("updatedAt", $util.time.nowISO8601()))

сгенерировать aws-усиление-переопределение-автоматически

PS Поместить новые преобразователив папке / resolvers.Не в / build / resolvers

0 голосов
/ 04 января 2019

Создайте два интерфейса graphql, один из которых общедоступен и предоставляет только те запросы, мутации и подписки, которые вы хотите предоставить приложению / пользователям. Это то место, куда уходит вся ваша бизнес-логика, записанная в средства распознавания, чтобы гарантировать, что поля, такие как метки времени, не будут перезаписаны.

Второй вариант является более полным и доступен только для вашего общедоступного интерфейса graphql.

Вот как Йога / Призма работают вместе.

...