Подтвердить что ты не робот

Spring Решения безопасности /Java EE для ролей дерева иерархии

Я знаю Spring Безопасность хороша для стандартной роли и разрешения на основе разрешений. Я не уверен, что этот сценарий:

В системе работает 10 000 сотрудников, сотрудники организованы в организационную диаграмму (дерево отчетов о том, кто через отделы). Некоторые из этих сотрудников являются пользователями. Этим пользователям разрешено только доступ к сотрудникам в своей линии ответственности (их ветвь в дереве/потомок своего сотрудника).

Итак, мне интересно, как современные системы Java EE (или другие) управляют этими проверками? Может ли Spring Security (ACL) сделать это и как его смоделировать?

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

4b9b3361

Ответ 1

Поскольку я работаю над этой темой, как в течение месяца, я могу дать вам свой ответ на этот вопрос, однако может быть лучший ответ.
В Spring безопасности есть что-то как иерархия роли, а если вы используете ROLE_A > ROLE_B, то у ROLE_A будут все авторизации, которые имеет ROLE_B.
Итак, есть два варианта:

1. Для каждого пользователя и его потомков есть пара таких ролей. ROLE_USERi для пользователя и ROLE_USERiDESC для своих потомков. У вас будет ROLE_USERi > ROLE_USERiDESC
Но (как я не знаю вашу диаграмму org) этого может быть недостаточно, потому что может быть много этих пар! Это, как-то, подходит, если ваше дерево имеет два или три уровня (у ROLE_USER не более одного или двух восходящих), поскольку чем выше роль, тем больше у него будет власти.

2. В моем проекте (который случайно так похож) я сделал другую альтернативу. У меня есть некоторые основные роли для некоторых основных действий. И у меня есть "заботливая группа", в которой опекун может наблюдать за данными своих потомков.
Зачем мне это делать? Потому что у меня должны быть роли для какого-либо действия (например, редактировать, удалять, получать доступ к некоторым конфиденциальным данным и...) и заботиться о группах. Если A является опекуном B, он может наблюдать данные B, но A не может ничего сделать за пределами своих полномочий.

BTW, он еще не полностью протестирован, и вы можете прийти к другому возможному решению.

См. также:

Ответ 2

Когда мы говорим о Spring безопасности, есть две вещи, которые предоставляет Spring. 1) Управление ролями 2) ACL (Разрешения на уровне домена) Я думаю, что вам нужны разрешения на уровне домена.

Если вы планируете использовать управление ролями, создавая соответствующую роль для каждого пользователя, данные могут расти. Второй вариант - использование разрешений на уровне домена (spring ACL), который является хорошей основой для авторизации во время выполнения. Вы можете использовать это для авторизации на основе аннотаций, но API-интерфейсы управления очень ограничены (BasicLookupStrategy), поэтому просмотрите документацию перед ее использованием.