Я предложил выполнимое решение этих требований в https://github.com/aws-amplify/amplify-cli/issues/630. И оно работает в моем приложении.
Да, поскольку может быть так много организаций, использование Cognito нецелесообразногруппа для представления организации.
Идея моего решения состоит в том, чтобы иметь 3 пользовательских модели: User
, Organization
и Membership
.Это позволяет устанавливать отношения «многие ко многим» между пользователями и организациями: пользователь может принадлежать нескольким организациям, а организация может использовать несколько пользователей.
User
может содержать свою собственную информацию.Вы также можете позволить пользователю иметь тот же id
, что и в Cognito, так что вы можете выровнять пользователя Cognito с User
, хранящимся в DynamoDB. Organization
может содержать свою собственную информацию. Membership
является критическим мостом, поскольку он соединяется с обоими сторонами (пользователем и организацией), и вы можете закодировать информацию о роли здесь.
См. раздел «многие ко многим» , чтобы понять, как Membership
работает в AWS Amplify 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
, а остальные почти такие же.