【问题标题】:Conditional read access to DynamoDB table with AWS Amplify使用 AWS Amplify 对 DynamoDB 表进行条件读取
【发布时间】:2021-01-01 23:40:27
【问题描述】:

我正在使用 AWS Amplify 构建一个应用程序,其中有三个 DynamoDB 表:UsersPostsSubscriptions

  1. 用户可以发帖
  2. 用户订阅其他用户
  3. 如果用户 A 订阅了用户 B,用户 A 只能查看用户 B 的帖子

第 1 点和第 2 点很容易通过标准的 graphQL 突变实现。但我被困在如何以一种优雅的方式实现 3.。目前我所做的是使用 lambda 解析器。

给定输入“用户A 想要看到用户B”,lambda 解析器执行以下操作:

  1. 查询Subscriptions表,看看是否有“用户A订阅用户B”的文档
  2. 如果存在这样的行,则查询Posts表并返回文档。如果不是,则不返回任何内容。

这个逻辑需要两次往返,但由于发电机速度很快,我可以接受这种权衡。不过还有其他缺点,所以我想知道是否有更多的 Amplify-native 方式来做到这一点?也许是一些神奇的 DynamoDB 和 @auth 诡计?

谢谢!

【问题讨论】:

    标签: database authentication amazon-dynamodb aws-amplify


    【解决方案1】:

    如果您使用多个表来存储数据,则多查询方法是您唯一的选择。

    可以在跨多个表更改项目时使用事务,这在您想要基于另一个表中的项目的条件执行操作时很有用。但是当涉及到读取操作时,您没有这样的选择。

    除了重新设计表以支持这种访问模式之外,我不认为两次读取特别糟糕。

    如果您想在 DDB 之外处理授权逻辑,您可能需要查看 AWS IAM 及其在 Fine-Grained Access Control 上的文档。除其他功能外,IAM 还可以根据某些主键值限制对表中特定项目的访问。

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 2018-07-16
      • 2019-04-21
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多