0

我创建了简单的 grapql 模式:

type Announcement @model @auth(
  rules: [{ allow: owner }]){
  id: ID!
  name: String!
  selectedTags: String!
  owner: String!
  price: Float
  description: String!
  image: S3Object
  createdAt: String
}

AWS Amplify 为我生成listAnnouncements查询,允许我获取其所有者的所有公告,因此在所有者的帐户中,我只会看到他创建的那些。在单独的视图中,我想列出所有创建的公告,也包括其他用户。

我认为问题在于我如何访问查询,所以我检查了 AWS Amplify<UserContext><Connect>方法,但看起来它并没有解决问题。

用户有没有办法获得对所有公告的读取权限,并且只能修改他创建的公告?

4

1 回答 1

0

您可以执行此操作的一种方法是为您的api( amplify update api) 设置多种身份验证模式,例如,您可以将 Cognito 设置为默认身份验证模式,而 IAM 作为辅助模式。设置(和amplify push编辑)后,您可以在模型上添加身份验证规则:

type Announcement @model @auth(
  rules: [
    { allow: owner }
    { allow: public, provider: iam, operations: [read] }
  ]
)

您还需要在 AWS 控制台中进入 Cognito 并在您的身份池中启用未经身份验证的访问:

在此处输入图像描述

仔细检查是否为 Auth 和 UnAuth 角色设置了首选角色,然后选中 ✅ 那个小框,上面写着“启用对未经身份验证的身份的访问”。

最后,您需要调整代码以告诉 Amplify graphQL 客户端将 IAM 用于那些未经身份验证的查询,例如:

return API.graphql({ queries.MyQuery, variables, 'AWS_IAM' })

到目前为止,我已经在几个项目中使用了它,希望对您有所帮助!

于 2020-11-08T03:18:09.883 回答