Похоже, что ваше решение о доступе основано на «рабочей роли», а не на пользовательских ролях, поэтому может быть лучше использовать «операционную роль» непосредственно в ограничениях Spring Security. По сути, это подход RBAC, в котором существует соответствие между ролями пользователей и операциями, которые им разрешено выполнять.
Вы бы решили проблему в AuthenticationProvider
, а не в UserDetailsService
, добавив туда слой отображения, который переводит роли пользователей (предоставляемые UserDetailsService
) в права, которые пользователь имеет в приложении. , Они будут составлять набор полномочий, которые возвращаются в объекте Authentication
, созданном AuthenticationProvider
.
Уровень отображения будет напрямую использовать данные, которые предоставляет ваш интерфейс администрирования.
Возможно, вы захотите взглянуть на эту презентацию Майка Вайснера, в которой, помимо прочего, рассматривается аналогичный материал.
Кроме того, Spring Security 3.1 будет включать в себя дополнительную стратегию GrantedAuthorityMapper
, чтобы упростить подключение такого вида.