Comments 4
а запрос от бд это эт постгрес?
Красиво, но не соответствует реальным потребностям:
Тысячи документов ассоциировать с правами для каждого пользователя - серьезная нагрузка. Особенно, если пользователь перешёл на новое место работы и все ранее выданные права необходимо пересмотреть по всем историческим документам;
Если у пользователя доступ предоставлен к миллиону документов, какого размера запрос отправится в СУБД чтобы показать список этих документов?
Подобные попытки спрятать логику в некую библиотеку разбиваются на реальных задачах. На сегодняшний день задача не решена и не имеет достаточной теоретической базы.
Например, задачу прав доступа нужно рассматривать со структуры предприятия, где права делегируются сверху-вниз, чтобы у подчинённого прав было не более чем у вышестоящего руководителя. А на практике, права руководителя собирают, как правило, снизу-вверх, админам проще дать права подчинённым, а руководителей включать во все возможные группы, или сделать одну супер группу, что тоже не упрощает раздачу прав.
Вы правы. есть проблема в делегировании и наследовании прав подчиненных - но тут я не стал это рассматривать усложнять чтение. на практике наследование прав решается в рамках слоя бизнес-аналитиков - системных ролях где предусматривается что роль может иметь повышенные права и может вмешиваться в права нижестоящих сотрудников.
1. если у сотрудника меняются права и у него забирают корневое полномочие - система не будет искать атрибуты и следовательно нагрузки не будет даже на базу. Но если ему вернут право - все атрибуты вернуться к нему самостоятельно.
2. если у пользователя доступ к миллиону документов (вполне реальная задача) это будет по факту всего одна выборка из базы. (тут надо сделать пометку что в этой системе реализован CQRS и eventsourcing поэтому чтение списка документов происходит из elasticsearch где объект собран сразу со всеми атрибутами, которые имеют на него право, если кому -то дали или забрали право - объект меняется в elasticsearch)
наследование прав тут не использовалось тк это просто иной подход.
сейчас этот подход успешно лопатит 100млн документов с версионированием в пяти абсолютно разных системах.
Пример про иерархию привел только как пример первостепенной, но не изученной области. Соответственно про простоту технологий говорить пока рано.
При изменении прав нагрузка будет - чтобы забрать полномочия.
К процессу выборки данных вопросов нет, смущает наличие функции в СУБД способной принять и переварить текст запроса с перечислением миллионов идентификаторов. При этом, с ростом объема данных размер текста запроса будет только увеличиваться.
Идеи инженеров-программистов не ограничены физическими законами, как у инженеров-конструкторов летательных аппаратов, но также регулярно разбиваются на реальных испытаниях.
ABAC в микросервисах: сложная матрешка прав, простой API и никакой потери производительности