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

In an AppSync @auth rule, how do I set an ownerField to a property in an array?

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

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 规则来为 editors 数组中的 User 提供更新权限?

如果您使用的是亚马逊 Cognito 用户池,则应将 Post 中的编辑器类型设置为字符串数组,并将值设置为您想要访问的用户的 Cognito ID .这是解释 in the amplify cli documentation.

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

您的架构应如下所示:

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