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
我有以下架构,事件的作者可以在其中对事件进行注释。只有事件的作者才能创建注释。我将 author
存储在事件中。但是,我发现其他用户可以通过简单地传递另一个用户事件的 eventId 来为他们没有创建的事件创建注释,如下所示:
mutation {
noteOnEvent(input: { eventId: "***", content: "A comment"}) {
eventId
content
}
}
我该如何防止这种情况发生?我没有看到在 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]
}
您可以使用 嵌套解析器 完成此操作。
如果稍微修改一下架构,您可以像这样完成它:
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