首页 > 解决方案 > 使用 AWS Amplify 和 AWS Cognito 进行数据特定授权

问题描述

背景

大家好。首先,我正在学习 AWS Amplify / GraphQL,所以我不确定这是否是 GraphQL 特定的问题,或者它是否与 AWS Cognito 相关。也就是说,如果这个问题被认为是题外话,请引导我到一个更合适的地方问这个问题。

问题

使用 AWS Amplify 和 AWS Cognito,我希望 GraphQL 层仅响应特定于该实体的数据。举个例子:

给定一个组织和用户数据库结构,使得许多用户属于一个组织,我如何确保用户只能与特定于其所属组织的数据进行交互?

更详细的例子

鉴于下图,我如何确保user #2在查询 AWS Amplify GraphQL 层时,他们永远无法与organization #1的数据进行交互?

关系示例

我试过的

目前,在 GraphQL 层中,我WHERE为每个查询手动添加了一个子句,这样客户端就无法查看跨组织数据。但是,这不会阻止任何用户创建自己的查询来查看跨组织数据。我目前正在考虑构建一个自定义授权解析器,但它似乎还不符合我的特定需求。

任何帮助是极大的赞赏。

标签: amazon-web-servicesaws-lambdagraphqlamazon-cognitoamazon-cognito-triggers

解决方案


如果你想保持Amplify做事的方式,你可以使用授权规则

团体

如果组织中的用户在同一个Cognito组中,那么您可以使用Dynamic group authorization. 例如:

type Sale @model @auth(rules: [{ allow: groups, groupsField: "org" }]) {
  id: ID!
  org: [String]
}

这样,只有销售人员才能访问具有与其自己匹配的组/组织的销售。

属性

或者,您也可以使用用户的属性,ownerField以及指令。


推荐阅读