Я пытаюсь создать одну модель с несколькими атрибутами:
type Guest @model {
id: ID!
name: String
dayGuest: Boolean
attending: Boolean
dietryRequirements: String
owner: String
}
Я бы хотел настроить, как разные пользователи могут получить доступ к данным в этой модели:
Пользователи, которые назначены группе «admins» в cognito, должны иметь возможность создавать, читать, обновлять и удалять все поля в записи.
Владелец запись должна быть в состоянии прочитать каждое поле и обновить поля attending
и dietryRequirements
.
- Любой пользователь с действительным JWT должен иметь возможность обновить поле
owner
.
Для достижения этой цели я применил следующие директивы @auth:
@auth(rules: [{allow: groups, groups: ["admins"]}])
на Guest
модели @auth(rules: [{allow: owner, ownerField: "owner", operations:[read]}])
на Guest
модель и @auth(rules: [{allow: owner, ownerField: "owner", operations: [update]}])
в полях attending
и dietryRequirements
. @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 записи или нет.
Как мне достичь того, чего я хочу?