Graphql 在AppSync@auth规则中,如何将ownerField设置为数组中的属性?

Graphql 在AppSync@auth规则中,如何将ownerField设置为数组中的属性?,graphql,aws-appsync,Graphql,Aws Appsync,假设我有以下AppSync GraphQL模式,其中包含User类型,以及Post类型,其中editors字段设置为User的数组: type User @model @auth(rules: [ { allow: owner } ]) { id: ID! owner: String! username: String! } type Post @model @auth(rules: [ { allow: owner }, # Can

假设我有以下AppSync GraphQL模式,其中包含
User
类型,以及
Post
类型,其中
editors
字段设置为
User
的数组:

type User
  @model 
  @auth(rules: [
    { allow: owner }
  ])
{
  id: ID!
  owner: String!
  username: String!
}

type Post
  @model
  @auth(rules: [
    { allow: owner },
    # Can I do this?
    # { allow: owner, ownerField: "editors.owner", operations: [update] }
  ])
{
  id: ID!
  owner: String!
  title: String!
  content: String
  editors: [User]
}

如何创建
@auth
规则,为
编辑器
数组中的
用户
授予更新权限?

如果您使用的是amazon Cognito用户池,您应该将Post中的编辑器类型设置为字符串数组,并将值设置为您想要访问的用户的Cognito ID。这是可以解释的

要使编辑器的类型为User,我建议您创建另一个名称不同的参数(例如editorUsers),并按照所述将其连接到用户模型

您的架构应该如下所示:

type User
@model
@key(name: "byUser", fields: ["username"]) 
@auth(rules: [
 { allow: owner }
])
{
  id: ID!
  owner: String!
  username: String!
}

type Post
@model
@auth(rules: [
  { allow: owner },
  { allow: owner, ownerField: "editors", operations: [update] }
])
{
  id: ID!
  owner: String!
  title: String!
  content: String
  editors: [String]
  editorsUsers: [User] @connection(keyName: "byUser", fields: ["id"])
}