Доступ / проверка иерархических ролей Spring Security программно - PullRequest
2 голосов
/ 24 февраля 2012

В моем проекте Grails я определил несколько иерархических ролей с помощью плагина Spring Security, например. ROLE_USER > SOME_OTHER_ROLE. При защите методов контроллера с использованием аннотации @Secured все работает просто отлично. Однако я также хотел бы программно проверить роль в моем коде для одного варианта использования. Используя следующий подход, я всегда получаю false, даже если пользователь наследует роль через определение иерархической роли:

request.isUserInRole('SOME_OTHER_ROLE')

Также следующие вызовы никогда напрямую не возвращают унаследованные роли:

SecurityContextHolder.context?.authentication?.authorities
springSecurityService.getPrincipal().getAuthorities()

Есть ли способ проверить, имеет ли пользователь также унаследованную роль?

1 Ответ

2 голосов
/ 24 февраля 2012

Это похоже на ошибку (или, по крайней мере, упущение) в SecurityContextHolderAwareRequestWrapper, которая добавляет оболочку запроса для реализации метода isUserInRole.

Вы можете использовать метод extractAuthorities компонента roleVoter bean *,Добавьте для него инъекцию зависимости (def roleVoter) и затем вызовите

def allRoles = roleVoter.extractAuthorities(
        SecurityContextHolder.context.authentication)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...