首页 文章

AppSync GraphQL用于分组数据的订阅

提问于
浏览
0

我已经为我的GraphQL查询和突变实现了AWS Lambda授权层,这样,如果用户是项目所属组的成员,则用户只能读取/写入特定DynamoDB表项的数据,使用groupId分区实现key和itemId的排序键 . 这样表可以有许多具有公共groupId的itemId,还有许多不同的groupId . 这一切都按预期工作 .

现在,我希望能够将此组授权扩展到我的实时GraphQL订阅 . 我观察到未参数化的订阅广播给所有用户 . 我需要一个约束订阅事件的解决方案,以便所有组成员和组成员都接收包含相应groupID键的表数据突变的订阅事件 . 作为许多组的成员的用户将接收他们所属的所有组的订阅事件 .

组和组成员是动态的,创建组并通过应用程序业务逻辑添加成员 .

我观察了许多AWS授权技术,静态和动态 . 我已经看到了参数化订阅和订阅解析器的示例,这些示例目标只订阅了一个项目,但我看不到任何符合我特定“多组”需求的内容 .

我正在使用AWS Amplify API进行客户端GraphQL调用 . 我观察Apollo有一个subscribeToMore()可能对这个场景有帮助,但我现在更喜欢远离我需要的返工,以使我的UI适应Apollo 2的Render Props模式 .

有什么想法吗?

1 回答

  • 1

    您可以执行以下操作以使用AppSync启用此用例 .

    • 在订阅中添加"groupId"参数 .

    • 将订阅解析程序附加到您的订阅 .

    • 在订阅解析程序的请求映射模板中,查询User表以确定调用者被授权的组 .

    • 在订阅响应映射模板中,使用从用户表查询中检索到的组列表交叉检查订阅"groupId"参数 . 如果呼叫者试图订阅他们未授权的组,则拒绝该请求 .

    • 确保您的突变返回groupId字段,以便AppSync的订阅可以正确路由您的邮件 .

    然后,您可以多次为客户订阅,一次为他们想要通知的每个组 .

    以下是订阅授权文档,其中包含与您的示例类似的示例:https://docs.aws.amazon.com/appsync/latest/devguide/security-authorization-use-cases.html#real-time-data

相关问题