У меня есть простое приложение Grails с установленным плагином Spring Security Core, которое работает нормально. Однако я не нашел решения проблемы с обновлением прав авторизованного пользователя в контексте безопасности. Я не говорю об обновлении данных текущего пользователя (например, springSecurityService.reauthenticate).
Моя проблема: у меня есть простое приложение для управления пользователями с используемыми полномочиями ROLE_ADMIN и ROLE_USER. Теперь у меня два администратора одновременно вошли в систему (с полномочиями ROLE_ADMIN) с разных компьютеров, и один администратор решает изменить полномочия другого администратора с ROLE_ADMIN на ROLE_USER.
Как я могу обновить пользователя и роль, чтобы измененный пользователь (с новой ролью ROLE_USER) не может выполнять никаких действий уровня ROLE_ADMIN и сразу же перенаправляется на страницы уровня ROLE_USER? Есть ли способ обновить контекст безопасности, чтобы мне не приходилось выполнять дополнительную проверку во всех действиях контроллера, были ли изменены права авторизованного пользователя? Могу я как-нибудь использовать для этого свойство cahceUsers? Я не менял cacheUsers и, насколько я понимаю, по умолчанию false. Пожалуйста, поправьте меня, если я ошибаюсь.
РЕДАКТИРОВАТЬ: Последовательность, вызывающая проблему:
Администратор «A» изменяет администратора «B» и устанавливает новую роль (ROLE_USER) для администратора «B»
, код вызывает PersonRole.removeAll (personInstanceB) и
PersonRole.create (personInstanceB, roleAdmin)
, и все обновляется нормально
, в то же время администратор «B» уже вошел в систему, когда их права доступа изменены. Администратор «B» может продолжать работать на страницах с ограниченным доступом ROLE_ADMIN, пока он / она не выйдет из системы и не выполнит новый вход. Только тогда полномочия обновляются и администратор «B» получает новую роль (ROLE_USER)
. Я хочу, чтобы администратор «B» был перенаправлен на страницы ROLE_USER, когда пользователь обновляется с новой ролью, а не только после выхода из системы / входа в систему
вызов springSecurityService.reauthenticate personInstanceB.username)
заставляет администратора «A» войти в систему как администратор «B», поэтому это не работает.
Любые идеи приветствуются. Возможно, я пропустил здесь что-то простое, но я понятия не имею, каким будет решение.
Ура, mizzzto