Appsync 对多表突变的细粒度控制

Appsync Fine Graine Control on Mutation with Multiple Tables

我有以下架构,事件的作者可以在其中对事件进行注释。只有事件的作者才能创建注释。我将 author 存储在事件中。但是,我发现其他用户可以通过简单地传递另一个用户事件的 eventId 来为他们没有创建的事件创建注释,如下所示:

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

我该如何防止这种情况发生?我没有看到在 noteOnEvent 解析器

中访问 EventTable 作者的方法

架构

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]
}

您可以使用 嵌套解析器 完成此操作。

如果稍微修改一下架构,您可以像这样完成它:

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