使用 AWS Cognito 处理多个"accounts"中的一个用户?



我们有一个用户使用AWS Amplify和Cognito进行用户身份验证的用例,其中将赋予用户某些授权角色,例如"创建对象","删除对象"等

现在,我们有了一个新的要求,用户应该能够属于多个组织。这意味着用户必须选择属于不同组织中不同角色的选择,例如能够在一个组织中删除,但不能在另一个组织中删除(使用相同的帐户/电子邮件登录(。

由于组织创建组或每个组织的角色的组织数量变化,因此不是一个选项(因为可能会有数百万组(。

可以完全使用Cognito解决此问题,或者首选自定义编码的解决方案,仅使用Cognito进行身份验证?

我在https://github.com/aws-aws-amplify/amplify-cli/issues/630中提出了一个可行的解决方案。它正在我的应用中工作。

是的,由于可能有很多组织,因此使用Cognito组代表组织是不可行的。

我的解决方案的想法是拥有3个自定义模型:UserOrganizationMembership。这允许用户和组织之间的多对多关系:用户可以属于多个组织,并且组织可以雇用多个用户。

  • User可以包含其自己的信息。您也可以让用户具有与Cognito中相同的id,因此您可以将Cognito用户与存储在DynamoDB中的User对齐。
  • Organization可以包含其自己的信息。
  • Membership是连接到两端(用户和组织(的关键桥,您可以在此处编码角色信息。

请参阅多一到许多的部分,以了解Membership在AWS中如何工作graphql transform。

schema.graphql看起来像:

type User @model {
  id: ID!
  organizations: [Membership] @connection(name: "Membership_User")
}
type Organization @model {
  id: ID!
  users: [Membership] @connection(name: "Membership_Organization")
}
type Membership @model {
  id: ID!
  user: User! @connection(name: "Membership_User")
  organization: Organization! @connection(name: "Membership_Organization")
  role: Role!
}
type Role {
  canCreate: Boolean!
  canDelete: Boolean!
}

在我的GitHub问题中,将Project视为您的Organization,其余的几乎相同。

相关内容

最新更新