Мы разделяем наш монолитный раствор на микросервисы.Одним из микросервисов будет авторизация, которая отвечает за определение того, может ли пользователь получить доступ к определенным объектам.
В нашей системе мы разрешаем определять доступ к проектам для определенных пользователей в соответствии с различными критериями:
- пользователь является менеджером проекта,
- пользователь напрямую назначен проекту,
- пользователь назначен проекту через присутствие в команде,
- и т. Д.
Существуют правила, определяющие, может ли пользователь видеть или не видеть проект.
Микросервис авторизации будет отвечать за определение того, может ли пользователь получить доступ к проекту.Для поиска проектов (по имени) и отображения доступных проектов также должна быть возможность вернуть список всех доступных проектов для пользователя.
Проблема в том, что этот список может быть огромным (даже тысячи проектов).похоже проблема).Поэтому мы не можем позволить себе создавать запросы в других микросервисах, подобных этому:
SELECT * FROM project WHERE id IN ({list-of-accessible-projects-from-microservice})
Поскольку такой запрос не может быть принят СУБД из-за его длины.Также я беспокоюсь о производительности (большой список в предложении IN
может замедлить его).Я сравню это, но мне любопытны другие подходы, как я могу сделать это, используя автономный микросервис авторизации.Или используя другой подход (например, виртуальная таблица для каждого пользователя со списком идентификаторов проектов, к которым я могу присоединиться для запроса).