如何使用 GraphQL API 在 AWS AppSync 中的 DynamoDB 对象之间实现“分层”权限?

我正在使用 AppSync 和 GraphQL 构建一个项目,以使餐厅能够跟踪订单。有四个 DynamoDB 表(以下每个实体一个):餐厅、员工、表和订单。每个餐厅可以有许多员工,每个员工被分配到一张或多张桌子。每个表可以有多个订单,但一个订单只能属于一个表(有关这些关系的可视化,请参阅 System Design diagram)。

问题

我的问题是我需要非常细粒度的分层访问控制,主要有 3 个问题:

  1. 属于一家餐厅的员工不得能够创建、读取、更新或删除属于其他餐厅的任何实体。

  2. 餐厅的所有员工都可以查看餐厅中的所有餐桌。但是,他们只能查看属于该表的订单,如果它们被分配到该表(例如,将特定 Staff 成员连接到该表的 StaffTableJoin 对象存在。)OR他们是餐厅管理员(参见第 3 部分)

  3. 作为餐厅管理员的员工可以查看属于餐厅任何餐桌的所有订单。

为每个员工创建一个 cognito 用户,并应根据我的 DynamoDB 表中实体之间的关系分配他们的权限。

考虑的解决方案

我访问了 AWS 文档中的 Authorization and Authentication 页面以探索限制权限的选项。到目前为止,我已经考虑过使用 COGNITO_USER_POOLS 和 AWS_LAMDBA 授权。

  1. 对于使用 COGNITO_USER_POOLS 的方法,我将为每个餐厅创建一个 Cognito 用户组。当新员工注册时,他们会被分配到他们餐厅的用户组。然后,我将向每个数据库中的每个实体添加一个 groupsCanaccess 字段。我的解析器会检查请求用户是否属于允许访问每个资源的组。然而,这只能解决问题 1,因为餐厅的所有员工都将拥有访问其餐厅资源的相同权限。

  2. 对于使用 AWS_LAMbda 的方法,我不太确定这将如何工作,但我考虑创建一个 Authorization lambda 来检查请求用户所属的餐厅。例如,如果用户请求订单,我需要检查订单属于哪个表,然后检查是否存在 StaffUserJoin(将请求用户连接到表)。这种方法看起来很困难(也许不可能)。

非常感谢可以提供的任何建议,因为我已经为此苦苦挣扎了很长时间。这似乎是一个常见的用例,需要基于对象层次结构的权限。提前致谢:)

qq9931 回答:如何使用 GraphQL API 在 AWS AppSync 中的 DynamoDB 对象之间实现“分层”权限?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2141.html

大家都在问