Я использовал AWS Amplify для создания GraphQL API. В DynamoDB поля createdAt, updatedAt и owner создаются автоматически. Из коробки у меня нет возможности получить значения для этих полей. Теперь, когда я добавлю эти поля в аннотированную схему, я смогу получить значения, но все, у кого есть права на запись, могут просто перезаписать их, что раздражает поля времени и создает угрозу безопасности для поля владельца.
Итак, как мне получить эти значения?
Это конкретный вопрос AWS-Amplify. Дело не в том, как это сделать с помощью универсального GraphQL. Это очень конкретно о том, как это сделать с помощью модуля API AWS-Amplify и их (к сожалению, очень ограниченных) директив (https://aws-amplify.github.io/docs/js/api#using-graphql-transformers).
Я не знаю, как это сделать с помощью ampify.


Создайте два интерфейса graphql, один из которых является общедоступным и предоставляет только те запросы, изменения и подписки, которые вы хотите предоставить приложению / пользователям. Именно сюда идет вся ваша бизнес-логика, записанная в преобразователи, чтобы гарантировать, что поля, такие как временные метки, не перезаписываются.
Второй является более полным и доступен только для вашего общедоступного интерфейса graphql и используется только им.
Вот как работают вместе Йога / Призма.
Опять же, я не уверен, как это сделать с усилением. Может быть, мне стоит больше подчеркнуть это в вопросе.
Хорошо понял. Я не так хорошо знаком с Amplify, но я посмотрю, смогу ли я заставить Надера взглянуть на ваш вопрос. Он работает в команде Amplify
Чтобы получить эти данные, вам потребуется какой-то соответствующий тип и запрос в схеме.
Я знаю, что вы упомянули, что не хотели бы иметь их в схеме по таким причинам, как угроза безопасности, но на самом деле любое поле, доступное в вашей схеме, открыто для редактирования для всех, у кого есть доступ к API.
Я предлагаю вашим разработчикам, работающим над проектом, использовать новую среду, используя новую поддержку Multi Environment из Amplify CLI, чтобы иметь отдельный API, который не отображается в производственной среде, чтобы предотвратить проблемы с нарушением изменений в вашей основной схеме.
Вы должны переопределить создание резолвера следующим образом:
Вместо:
## [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-ampify-overriding-auto-сгенерированный
P.S. Поместите новые резолверы в папку / resolvers. Не в / build / resolvers
Разве это не помогло бы, если бы вы переместили свой ввод в тип ввода? Возможность запроса не должна приводить к изменению в graphql.