amazon-web-services - 使用 AWS Amplify 和 AWS Cognito 进行数据特定授权
问题描述
背景
大家好。首先,我正在学习 AWS Amplify / GraphQL,所以我不确定这是否是 GraphQL 特定的问题,或者它是否与 AWS Cognito 相关。也就是说,如果这个问题被认为是题外话,请引导我到一个更合适的地方问这个问题。
问题
使用 AWS Amplify 和 AWS Cognito,我希望 GraphQL 层仅响应特定于该实体的数据。举个例子:
给定一个组织和用户数据库结构,使得许多用户属于一个组织,我如何确保用户只能与特定于其所属组织的数据进行交互?
更详细的例子
鉴于下图,我如何确保user #2
在查询 AWS Amplify GraphQL 层时,他们永远无法与organization #1
的数据进行交互?
我试过的
目前,在 GraphQL 层中,我WHERE
为每个查询手动添加了一个子句,这样客户端就无法查看跨组织数据。但是,这不会阻止任何用户创建自己的查询来查看跨组织数据。我目前正在考虑构建一个自定义授权解析器,但它似乎还不符合我的特定需求。
任何帮助是极大的赞赏。
解决方案
如果你想保持Amplify
做事的方式,你可以使用授权规则。
团体
如果组织中的用户在同一个Cognito
组中,那么您可以使用Dynamic group authorization
. 例如:
type Sale @model @auth(rules: [{ allow: groups, groupsField: "org" }]) {
id: ID!
org: [String]
}
这样,只有销售人员才能访问具有与其自己匹配的组/组织的销售。
属性
或者,您也可以使用用户的属性,ownerField
以及指令。
推荐阅读
- android - Firestore 查询权限被拒绝
- jena - 使用 Jena 写入 Ontotext GraphDB
- firebase - 印度的一组开发人员为丹麦的客户提供 Firebase 托管
- mysql - mysql - 在 where 子句存储过程中使用变量
- javascript - 在导出期间显示更新进度
- android - 如何为 android 架构组件生命周期事件添加单元测试?
- google-sheets - 带有排名的电子表格数据透视表
- angular - 如何检查警卫中的skipLocationChange?
- firebase - 这种重新加载方法是如何工作的,它到底是用来做什么的?
- typescript - 如何在具有多个 tsconfig.json 的项目中设置路径属性?