AWS Amplify (AppSync + Cognito) 使用每个 organitzation/tenant 的动态组进行授权
AWS Amplify (AppSync + Cognito) Authorization using dynamic groups per organitzation/tenant
我有一个具有多组织结构的 AWS Amplify 应用程序:
组织 A -> 组织 A 的内容
机构 B -> 机构 B 的内容
假设我们有用户 Alice,Alice 属于两个组织,但是,她在每个组织中具有不同的角色,在组织 A 上,Alice 是管理员并且拥有更多权限(即:可以删除内容或修改其他人的内容),而在组织 B 中,她是普通用户。
出于这个原因,我不能简单地在 Amplify (Cognito) 上设置常规组,因为一些用户,例如 Alice,可以属于不同组织的不同组。
我认为的一个解决方案是为每个组织和角色组合建立一个小组。
即:OrganizationA__ADMIN
、OrganizationB__USER
等
因此,我可以使用 Content
模型上的组身份验证指令来限制对模式的访问:
{allow: group, groupsField: "group", operations: [update]},
内容将有一个 group
字段,其值为:OrganizationA__ADMIN
然后我可以使用 Admin Queries API 将用户添加到组中
但是,似乎无法动态地将用户添加到组中,每次创建新组织时我都必须手动创建每个组,这几乎扼杀了我的想法。
关于如何实现我想要的结果还有其他想法吗?
我知道我可以在代码上添加限制,但这不太安全,我宁愿在数据库层有这个限制。
考虑在你身上产生额外的主张pre-token-generation handler
基本上您可以创建一个包含组织角色映射的属性
例如
{
// ...
"custom:orgmapping": "OrgA:User,OrgB:Admin"
}
然后在预令牌生成处理程序中将它们转换为池中实际上不存在的“伪”组。
我有一个具有多组织结构的 AWS Amplify 应用程序:
组织 A -> 组织 A 的内容 机构 B -> 机构 B 的内容
假设我们有用户 Alice,Alice 属于两个组织,但是,她在每个组织中具有不同的角色,在组织 A 上,Alice 是管理员并且拥有更多权限(即:可以删除内容或修改其他人的内容),而在组织 B 中,她是普通用户。
出于这个原因,我不能简单地在 Amplify (Cognito) 上设置常规组,因为一些用户,例如 Alice,可以属于不同组织的不同组。
我认为的一个解决方案是为每个组织和角色组合建立一个小组。
即:OrganizationA__ADMIN
、OrganizationB__USER
等
因此,我可以使用 Content
模型上的组身份验证指令来限制对模式的访问:
{allow: group, groupsField: "group", operations: [update]},
内容将有一个 group
字段,其值为:OrganizationA__ADMIN
然后我可以使用 Admin Queries API 将用户添加到组中 但是,似乎无法动态地将用户添加到组中,每次创建新组织时我都必须手动创建每个组,这几乎扼杀了我的想法。
关于如何实现我想要的结果还有其他想法吗? 我知道我可以在代码上添加限制,但这不太安全,我宁愿在数据库层有这个限制。
考虑在你身上产生额外的主张pre-token-generation handler
基本上您可以创建一个包含组织角色映射的属性
例如
{
// ...
"custom:orgmapping": "OrgA:User,OrgB:Admin"
}
然后在预令牌生成处理程序中将它们转换为池中实际上不存在的“伪”组。