【问题标题】:In an AppSync @auth rule, how do I set an ownerField to a property in an array?在 AppSync @auth 规则中,如何将 ownerField 设置为数组中的属性?
【发布时间】:2020-04-10 09:44:23
【问题描述】:

假设我有以下 AppSync GraphQL 架构,其类型为 UserPost 类型的 editors 字段设置为 Users 数组:

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 数组中Users 的更新权限?

【问题讨论】:

  • @Hoarce 你找到解决方案了吗?
  • @ataravati,你找到解决方案了吗?
  • @HackRx 我最终做的是用@function创建一个lambda解析器。
  • @ataravati lambda resolver on queries/mutation 对吗?
  • 是的,没错。

标签: graphql aws-appsync


【解决方案1】:

如果您使用的是 amazon 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"])
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2014-02-04
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    相关资源
    最近更新 更多