Авторизация с помощью: динамических групп, списков содержимого на основе разрешений, архитектуры на основе микроуслуг? - PullRequest
0 голосов
/ 02 мая 2019

Я не уверен, что Spring Security / Spring Cloud могут быть полезны для моей авторизации.Это мой вариант использования:

  • У меня есть приложение, подобное CMS.
  • Контент может быть назначен одной или нескольким «группам»
  • Aсодержимое может быть просмотрено пользователем, если этот пользователь принадлежит хотя бы к одной из групп.
  • Важное примечание : эти группы не имеют жесткого кода!Через веб-приложение пользователи могут создавать (во время выполнения) новые пользовательские группы, поэтому группы и пользователи находятся внутри таблиц БД.

Пример: контент назначается группам:«Германия», «Швеция», «Программисты», «Менеджеры».

  • менеджер из Германии может прочитать этот контент
  • менеджер из Франции может прочитать этот контент (он является(по крайней мере, менеджер)
  • UX Designer из Франции не может прочитать этот контент.

Чтобы получить разрешение на доступ к одному контенту, проверка довольно проста!

Моя самая большая проблема связана с списком содержимого , которое пользователь может видеть.В настоящее время я управляю этим через запросы SQL.Я объединяю содержимое с назначенными им группами, а затем использую этот тип SQL для фильтрации содержимого:

... WHERE ... group IN  [[list of groups associated to the authenticated user]]

Чтобы предотвратить проблемы с производительностью, эти результаты запроса кэшируются.

проблемы кажутся хуже, когда я добавляю «данные» к этому содержимому, давайте представим, что это содержимое можно прокомментировать.Я хочу перечислить только комментарий, который пользователь имеет право видеть.

Правило довольно простое, вы можете прочитать комментарий, если вам разрешено просматривать его родительский контент.

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

И ... наконец, если я хочу использовать микросервисна основе архитектуры, комментарии будут управляться другой службой (нет?).Но для того, чтобы перечислить комментарии, которые пользователь может видеть, мне снова понадобится вся информация о «пользователях и группах», поэтому архитектура, основанная на микросервисах, не кажется такой подходящей.

Я полностьюнеправильно в моем подходе к дизайну?

Большое спасибо.

1 Ответ

0 голосов
/ 02 мая 2019

Вам необходимо Spring Security в сочетании со списком контроля доступа (Spring Security ACL), который является наиболее детализированным пользовательским разрешением на основе разрешения безопасности объекта домена.

С помощью ACL вы можете назначить разрешение для определенных данных (эквивалентнок строке в вашей базе данных, чтобы понимать друг друга), например, чтение или запись, и вы также можете назначить пользователя или группу.

Spring Security с ACL охватывает все сценарии, которые вы описали, и вы можете найти пример начать здесь

комментарии будут обрабатываться другой службой (нет?)

Это зависит от вас, это зависит от вашегосценарий

Но для того, чтобы просмотреть комментарии, которые пользователь может видеть, мне снова понадобится вся информация о «пользователях и группах»,

Конечно!Когда вы фильтруете информацию, вам нужно знать зарегистрированного пользователя со связанными группами / ролями

, поэтому архитектура на основе микросервисов не выглядит такой подходящей.

Почему?Вам часто нужна информация о пользователе (и если у вас есть пользователь, вы можете прочитать связанные данные, если это необходимо), и это также происходит в микросервисах.Вам необходимо перенести информацию о пользователях с одного микросервиса на другой (например, с использованием JWT)

...