Как обрабатывается несколько директив @auth в схеме AWS AppSyn c GraphQL? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь создать одну модель с несколькими атрибутами:

type Guest @model {
    id: ID!
    name: String
    dayGuest: Boolean
    attending: Boolean
    dietryRequirements: String
    owner: String
}

Я бы хотел настроить, как разные пользователи могут получить доступ к данным в этой модели:

  1. Пользователи, которые назначены группе «admins» в cognito, должны иметь возможность создавать, читать, обновлять и удалять все поля в записи.

  2. Владелец запись должна быть в состоянии прочитать каждое поле и обновить поля attending и dietryRequirements.

  3. Любой пользователь с действительным JWT должен иметь возможность обновить поле owner.

Для достижения этой цели я применил следующие директивы @auth:

  1. @auth(rules: [{allow: groups, groups: ["admins"]}]) на Guest модели
  2. @auth(rules: [{allow: owner, ownerField: "owner", operations:[read]}]) на Guest модель и @auth(rules: [{allow: owner, ownerField: "owner", operations: [update]}]) в полях attending и dietryRequirements.
  3. @auth(rules: [{allow: private, operations: [update]}]) в поле owner.

Окончательная модель выглядит следующим образом:

type Guest @model @auth(rules: [{allow: groups, groups: ["admins"]}, {allow: owner, ownerField: "owner", operations:[read]}]){
    id: ID!
    name: String
    dayGuest: Boolean
    attending: Boolean @auth(rules: [{allow: owner, ownerField: "owner", operations: [update]}])
    dietryRequirements: String @auth(rules: [{allow: owner, ownerField: "owner", operations: [update]}])
    owner: String @auth(rules: [{allow: private, operations: [update]}])
}

Кажется, это не работает, и я не могу понять, почему. Пользователь с правами администратора может просматривать все и создавать новые объекты. Подтвержденный пользователь (не владелец) не может обновить поле владельца, поскольку это возвращает неавторизованную ошибку. Владелец может просматривать все записи, независимо от того, является ли он владельцем каждой указанной c записи или нет.

Как мне достичь того, чего я хочу?

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