Amazon dynamodb 如何检查实体在appsync中创建时的权限

Amazon dynamodb 如何检查实体在appsync中创建时的权限,amazon-dynamodb,graphql,aws-appsync,Amazon Dynamodb,Graphql,Aws Appsync,对不起,标题不具体。然而,我很难描述它 我正在使用aws appsync和aws cognito进行身份验证 我遵循了amplify文档中关于@auth注释的内容来处理突变和查询的权限 下面是我的模式的一个示例。 用户可以创建条目并与其他人共享。但是,他们应该只读取条目,而不应该拥有编辑该条目的权限 一个条目也有多个注释。(还有更多字段) 这是纸条 type Note @model @versioned @auth (rules: [{ allow: owner }]) { id: ID!

对不起,标题不具体。然而,我很难描述它

我正在使用
aws appsync
aws cognito
进行身份验证

我遵循了amplify文档中关于
@auth
注释的内容来处理突变和查询的权限

下面是我的模式的一个示例。 用户可以创建条目并与其他人共享。但是,他们应该只读取条目,而不应该拥有编辑该条目的权限

一个条目也有多个注释。(还有更多字段)

这是纸条

type Note @model @versioned @auth (rules: [{ allow: owner }]) {
  id: ID!
  text: String
  track: Track!
  diary: DiaryEntry @connection(name: "EntryNotes")
}
到目前为止,这一切都很好。但是问题是
注意
连接。
因为如果你创建一个便笺,你会这样创建它:

mutation makeNote {
  createNote (input: {
    text: "Hello there!"
    noteEntryId: "444c80ee-6fd9-4267-b371-c2ed4a3ccda4"
  }) {
    id
    text
  }
}
现在的问题是,您可以为无权访问的条目创建注释。如果你能找到他们的身份证


在创建便笺之前,是否有方法检查您是否拥有该条目的权限?

目前,最好的方法是通过Amplify CLI中的自定义解析程序。具体来说,您可以使用AppSync管道解析程序在创建便笺之前执行授权检查。管道解析器将包含两个函数。第一个将查找条目并将所有者与$ctx.identity进行比较。第二个函数将处理将记录写入DynamoDB。您可以使用
build/resolvers/Mutation.createNote.re(q | s).vtl中的相同逻辑来实现第二个函数,方法是将其复制到顶级
resolvers/
目录中,然后从自定义资源引用它。复制逻辑后,您将希望通过将
@model
更改为
@model(突变:{update:“updateNote”,delete:“deleteNote”})
来禁用默认的createNote突变

有关如何设置自定义解析程序的详细信息,请参阅。有关管道解析器的更多信息(与放大文档中的示例略有不同),请参阅。另请参阅AppSync的CloudFormation参考文档

展望未来,我们正在开发一种设计,允许您定义跨越@connections的身份验证规则。完成后,它将自动配置此模式,但尚未设置发布日期

mutation makeNote {
  createNote (input: {
    text: "Hello there!"
    noteEntryId: "444c80ee-6fd9-4267-b371-c2ed4a3ccda4"
  }) {
    id
    text
  }
}