@raiboon

Как реализовать фильтрацию списочных эндпоинтов для микросервисов на основе роли пользователя?

Уже есть микросервисы, есть необходимость реализовать более сложную ролевую модель для разграничения доступов. Нужны row based permissions.
Очень не хочется, чтобы права и ролевая модель сильно протекала в каждый из микросервисов. Будет бардак, но по другому вообще не получается придумать.
Если для одной сущности все просто - берем какой-нибудь open policy agent или ory/keto, у них есть удобные правила, подсовываем им объект и они решают можно его смотреть текущему пользователю или нельзя.

А вот со списочными вообще никак, ну не будешь же поднимать в память все сущности и проверять каждый. Или будешь? А как решить проблему пагинации? Что сервис отдал десяток объектов, и они все отфильтровались на policy decision point?

Значит все-таки роли и атрибуты должны "протечь" в каждый микросервис? Но тогда вообще теряется смысл в отдельном микросервисе для централизованных системах прав.

Не понимаю, как это реализуется в микросервисах. В монолите я делал такое, и там все просто - пилишь небольшое расширение для орм, автоматом добавляешь к моделям атрибуты и все магически фильтруется.
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
В общем случае все решается через ABAC. Что же касается списочных элементов то надо понимать несколько моментов:
- какая цель разграничения
- какая организация ресурсов

По моему опыту в большинстве случаев пробуют подменить организацию ресурсов - системой прав доступа. Надо понимать что это независимые, но часто последовательные процессы.

Возьмём пример - пользователи и проекты в jira. Права описывают доступ к проекту, но никак не влияют на список проектов. Вместо этого в jira хранится ассоциации между проектами и пользователями.

Можно рассмотреть также древовидную структуру ресурсов где права могут разделяться по маске, например:
/resource_type/resource_group/random_prefix*
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы