Я не уверен, что Spring Security / Spring Cloud могут быть полезны для моей авторизации.Это мой вариант использования:
- У меня есть приложение, подобное CMS.
- Контент может быть назначен одной или нескольким «группам»
- Aсодержимое может быть просмотрено пользователем, если этот пользователь принадлежит хотя бы к одной из групп.
- Важное примечание : эти группы не имеют жесткого кода!Через веб-приложение пользователи могут создавать (во время выполнения) новые пользовательские группы, поэтому группы и пользователи находятся внутри таблиц БД.
Пример: контент назначается группам:«Германия», «Швеция», «Программисты», «Менеджеры».
- менеджер из Германии может прочитать этот контент
- менеджер из Франции может прочитать этот контент (он является(по крайней мере, менеджер)
- UX Designer из Франции не может прочитать этот контент.
Чтобы получить разрешение на доступ к одному контенту, проверка довольно проста!
Моя самая большая проблема связана с списком содержимого , которое пользователь может видеть.В настоящее время я управляю этим через запросы SQL.Я объединяю содержимое с назначенными им группами, а затем использую этот тип SQL для фильтрации содержимого:
... WHERE ... group IN [[list of groups associated to the authenticated user]]
Чтобы предотвратить проблемы с производительностью, эти результаты запроса кэшируются.
проблемы кажутся хуже, когда я добавляю «данные» к этому содержимому, давайте представим, что это содержимое можно прокомментировать.Я хочу перечислить только комментарий, который пользователь имеет право видеть.
Правило довольно простое, вы можете прочитать комментарий, если вам разрешено просматривать его родительский контент.
Опять же, еслиЯ хочу проверить права пользователя, чтобы увидеть один комментарий, проверка очень проста, но все сложнее, если я хочу перечислить комментарии.
И ... наконец, если я хочу использовать микросервисна основе архитектуры, комментарии будут управляться другой службой (нет?).Но для того, чтобы перечислить комментарии, которые пользователь может видеть, мне снова понадобится вся информация о «пользователях и группах», поэтому архитектура, основанная на микросервисах, не кажется такой подходящей.
Я полностьюнеправильно в моем подходе к дизайну?
Большое спасибо.