Appsync Fine Graine Control для мутации с несколькими таблицами
У меня есть следующая схема, где автор события может делать заметки о событии. Только автор мероприятия должен иметь возможность создавать заметки. Я храню author
в случае. Однако я обнаружил, что другие пользователи могут создавать заметки о событии, которое они не создали, просто передавая eventId события другого пользователя, например, так:
mutation {
noteOnEvent(input: { eventId: "***", content: "A comment"}) {
eventId
content
}
}
Как я могу предотвратить это? Я не вижу способа доступа к автору EventTable в noteOnEvent
распознаватель
схема
type Note {
eventId: ID!
notetId: ID!
content: String
author: String
}
input CreateNoteInput {
eventId: ID!
noteId: String!
content: String
}
type Event {
id: ID!
name: String
author: String
notes: [Note]
}
1 ответ
Вы можете сделать это с помощью Nested Resolver.
Если вы слегка измените свою схему, вы можете сделать это следующим образом:
type EventCheckedNote {
// Add a resolver on note which creates the note. The event will be available as $cxt.source, and you can make an authZ check before making the mutation.
note: Note
}
type Mutation {
// Add a resolver on noteOnEvent which queries the Event table.
noteOnEvent(input: CreateNoteInput!): EventCheckedNote
}
Вот руководство по использованию вложенных распознавателей для выполнения проверок авторизации с использованием нескольких источников данных: https://hackernoon.com/graphql-authorization-with-multiple-data-sources-using-aws-appsync-dfae2e350bf2