首页 > 解决方案 > 使用 AWS AppSync(带放大),如何允许经过身份验证的用户只读访问,但只允许对象所有者的突变?

问题描述

我使用 Cognito 用户池作为默认身份验证方法。我还将 iam 用于我的 lambda 后端。我在 lambda 函数中为一些自定义解析器使用 aws appsync 客户端。

假设我有一个基本看起来像这样的 User 对象类型:

type User {
  id: ID!
  displayName: String!
}

我想能够做什么:

  1. 允许对象所有者的完全读/写访问权限。
  2. 允许 lambda 函数(带有 iam)完全读/写访问。
  3. 允许通过 cognito 用户池进行身份验证但不是对象所有者的用户进行只读访问。

我一直在使用@auth 指令进行挑选和刺激,试图获得我正在寻找的结果,但没有任何效果。我查看了AWS GraphQL Transform Docs上的文档,我似乎有点困惑。

这是我尝试过的:

type User
  @model
  @auth(rules: [
    { allow: owner, operations: [create, update, delete] }
    { allow: private, provider: iam, operations: [update, delete] }
  ]) {
  id: ID!
  displayName: String!
}

据我了解,通过从 @auth 指令中的操作列表中删除读取,可以删除对 get 和 list 查询的检查。我究竟做错了什么?我如何达到我想要的结果?

编辑:为了澄清,我已经启用了多种授权类型。(默认情况下 cognito 用户池和 lambda 解析器的 iam)。我的问题是:如何使用 @auth 指令来获得预期的结果?

标签: aws-amplifyaws-appsync

解决方案


AuthProvider { apiKey iam oidc userPools }


所以,我希望这可以帮助你(它对我有用:-))

type User @model @auth(rules:  [
      { allow: owner ,operations:  [create, update, delete]},
      { allow: private, provider: iam, operations: [read, update, delete] }
      { allow: private, provider: userPools, operations: [read] }
    ]) {
  id: ID!
  name: String!
}

推荐阅读