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

 Уже есть микросервисы, есть необходимость реализовать более сложную ролевую модель для разграничения доступов. Нужны row based permissions.   

Очень не хочется, чтобы права и ролевая модель сильно протекала в каждый из микросервисов. Будет бардак, но по другому вообще не получается придумать.  

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

  

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

  

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

  

Не понимаю, как это реализуется в микросервисах. В монолите я делал такое, и там все просто - пилишь небольшое расширение для орм, автоматом добавляешь к моделям атрибуты и все магически фильтруется. 

 В общем случае все решается через ABAC. Что же касается списочных элементов то надо понимать несколько моментов:  

- какая цель разграничения   

- какая организация ресурсов  

  

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

  

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

  

Можно рассмотреть также древовидную структуру ресурсов где права могут разделяться по маске, например:   

/resource\_type/resource\_group/random\_prefix*