@Ajolik

Какие вы знаете лучшие практики для реализации ACL (access control list)?

Здравствуйте!

Вопрос по лучшим практикам реализации ACL.

Для простоты опишу примитивную гипотетическую задачу.

Есть некий ресурс, например картинки. Картинки лежат на диске в виде файлов, а наименования файлов и ссылки на них в таблице СУБД. Ну еще размер картинок, допустим.
Есть таблица пользователей там же в СУБД.

Для доступа к картинкам разработан некий бэкенд, который принимает REST запросы, "транслирует" их в SQL, получает ответ от базы и выдает результат в виде JSON.

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

Так же допустим что есть запрос `/images/list` без параметров, который возвращает все картинки в СУБД доступные пользователю и выводит список в виде JSON.

Реализация:
На ум приходит только вариант: создается третья таблица, в которой перечисляются все изображения, доступные каждому конкретному пользователю, далее запрос пользователя приводит к выборке из базы одним или несколькими запросами нужных имен изображений и возврат списка пользователю. Ну допустим ок.

А что если пользователь должен иметь доступ к `*.png`, а к `*.bmp` не должен? Тогда получается что каждый запрос должен приводить к получению сначала всего списка файлов, а затем, к полученному списку должен применяться некий алгоритм фильтрации (все файлы `*.png` оставляем в ответе, в `*.bmp` удаляем из ответа)? Так что-ли?
А если нужно файлы до определенного размера показывать, а больше - нет? Еще один алгоритм фильтрации?
Как то это все в лоб получается...

А что если ресурсов 3, 5, 10, 100? А что если ресурсы иерархические? Например, есть связанные таблицы регионов/областей/городов и нужно настроить сложный доступ - пользователь может иметь доступ к нескольким регионам, к нескольким областям в доступных регионах и к некоторым городам в доступных областях. На GUI примерно понятно как это изобразить (в виде дерева с чекбоксами), а вот реализация этого добра? Это должно в каждом конкретном случае алгоритмизироваться "в лоб"? А если добавляется еще один уровень иерархии? Расширять алгоритм фильтрации ответа?
А что если каждый ресурс - отдельный микросервис? Получается что сначала надо собрать все ответы и потом фильтровать?

Как то это все... сложно... Если система достаточно сложная тут сам ACL будет огого какой...

Собственно, вопрос! Нет ли какого-либо красивого решения для таких задач?

Кто решал такие задачи? Дайте совет!
  • Вопрос задан
  • 185 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Ajolik Автор вопроса
Вот тут кое-что есть на эту тему

https://hashnode.com/post/entity-level-access-rest...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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