Динамическая иерархия ролей в Spring Security - PullRequest
2 голосов
/ 21 сентября 2011

Я не могу поверить, что все, что я нахожу для определения иерархий ролей, это какая-то странная .xml запись назначений ">". Должен быть способ создания объекта RoleHierarchy из иерархии ролей, определенных в базе данных ..?!

Я думаю о таблице, в которой есть столбцы:

  • role_id
  • child_role_id

определение отношения «многие ко многим» между ролью и ролью, говоря: какую роль играют какие дети? Я думаю, что я предпочел бы детей по сравнению с родителями, поскольку в этих XML-файлах настраивается иерархия: ADMIN> USER, USER> VISITOR.

(Это, кстати, заставляет задуматься, поддерживает ли стандартная реализация такие вещи, как ADMIN> USER, VISITOR, что означает, что USER и VISITOR находятся «на одном уровне».)

Теперь, если я хочу позвонить

roleHierarchy.getReachableGrantedAuthorities(authentication.getAuthorities()));

Мне нужен объект реализации RoleHierarchy. Spring-security предоставляет один, но установщик принимает только это странное строковое представление. Я действительно не хочу преобразовывать результаты своей базы данных в строковое представление, а работаю с какой-то древовидной структурой.

Так что, похоже, единственный способ - расширить реализацию и написать собственный установщик для работы с набором результатов моей базы данных для построения rolesReachableInOneStepMap и rolesReachableInOneOrMoreStepMap.

Или кто-нибудь знает другое решение?

Спасибо за любые указатели или подтверждение!

1 Ответ

1 голос
/ 19 октября 2011

Мы придумали собственное решение, внедрив RoleHierarchy, разрешив иерархию внутри UserDetailsService и используя самореферентные отношения am: n между Role и Role.Таким образом, иерархия сохраняется в базе данных, кэшируется при запуске приложения, обновляется при необходимости и используется для разрешения всех GrantedAuthorities при создании объекта UserDetails при входе в систему.

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