#amazon-web-services #amazon-cognito #aws-amplify #aws-appsync #graphql-schema
Вопрос:
У меня есть приложение AWS Amplify, которое имеет структуру с несколькими организациями:
Организация A -> Содержание организации A Организация B ->> Содержание организации B
Допустим, у нас есть пользователь Алиса, Алиса принадлежит к обеим организациям, однако у нее разные роли в каждой из них, в организации А Алиса является администратором и имеет больше прав (т. Е. может удалять контент или изменять контент других), в то время как в Организации Б она является обычным пользователем.
По этой причине я не могу просто установить регулярные группы в Amplify (Cognito), потому что некоторые пользователи, такие как Алиса, могут принадлежать к разным группам в разных организациях.
Одним из решений, которое , как я думал, было создание группы для каждой комбинации организации и роли. т. Е.: OrganizationA__ADMIN
, OrganizationB__USER
и т. Д., Чтобы я мог ограничить доступ к схеме, используя директиву групповой аутентификации в Content
модели:
{allow: group, groupsField: "group", operations: [update]},
Содержимое будет содержать group
поле со значением: OrganizationA__ADMIN
Затем я мог бы добавить пользователя в группу с помощью API запросов администратора, однако, похоже, невозможно динамически добавлять пользователя в группу, мне пришлось бы вручную создавать каждую группу каждый раз, когда создается новая организация, что в значительной степени убивает мою идею.
Есть еще какие-нибудь идеи о том, как я могу достичь результата, к которому стремлюсь? Я знаю, что могу добавить ограничение на код, но это менее безопасно, и я бы предпочел иметь это ограничение на уровне базы данных.
Ответ №1:
Рассмотрите возможность создания дополнительных утверждений в обработчике предварительной генерации токенов
В принципе, вы можете создать атрибут, который включает сопоставление ролей организации
напр.
{
// ...
"custom:orgmapping": "OrgA:User,OrgB:Admin"
}
затем преобразуйте их в обработчике предварительной генерации токенов в «псевдо» группы, которые на самом деле не существуют в пуле.
Комментарии:
1. Спасибо! Я попробую это и обновлю здесь