Appsync Fine Graine Control для мутации с несколькими таблицами - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть следующая схема, где автор события может делать заметки о событии. Только автор мероприятия должен иметь возможность создавать заметки. Я храню author в Событии. Однако я обнаружил, что другие пользователи могут создавать заметки о событии, которое они не создали, просто передавая eventId события другого пользователя, например:

mutation {
  noteOnEvent(input: { eventId: "***", content: "A comment"}) {
    eventId
    content
  }
}

Как я могу предотвратить это? Я не вижу способа доступа к автору EventTable в noteOnEvent resolver

Схема

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 Ответ

0 голосов
/ 02 ноября 2018

Вы можете сделать это, используя 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

...