我在AWS Amplify中有一个多租户应用程序,我使用这里描述的基于自定义属性的多租户
所有型号都有一个复合键;公司";并且cognito用户池具有将用户链接到租户数据的自定义属性custom:company
。
以下示例类型:
type Customer @model
@key(fields: ["company", "id"])
@auth(rules: [
{ allow: owner, ownerField: "company", identityClaim: "custom:company"},
{ allow: groups, groups: ["Member"], operations: [read] },
{ allow: groups, groups: ["Admin"]},
])
{
company: ID!
id: ID!
...
}
我想将用户组添加到cognito中,以管理不同用户可以执行的操作——例如,Admin
用户可以执行所有操作,但Member
用户只能执行read
问题是,第一个owner
身份验证规则将与具有匹配custom:company
属性的任何人相匹配,而不考虑其组。
有没有一种方法可以组合所有者和组@auth
规则,即owner and groups
都需要通过才能访问项目?
例如,允许Member
组的用户,但仅当他们的custom:company
属性与型号的company
匹配时才允许
另一个例子-任何具有匹配custom:company
属性的人都可以访问项目,但Members
只能读取
不幸的是,目前AWS Amplify指令无法实现这一点。
您不能将基于租户的身份验证与基于角色的身份验证相结合,以获得完全的多角色多租户应用程序。
https://github.com/aws-amplify/amplify-category-api/issues/449
您可以选择lambda授权器,然后在那里自己处理所有的授权逻辑。但这将是乏味的。