Плагин Grails Spring Security - измените права доступа пользователя, вошедшего в систему

У меня есть простое приложение 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. Пожалуйста, поправьте меня, если я ошибаюсь.

РЕДАКТИРОВАТЬ: Последовательность, вызывающая проблему:

  1. Администратор «A» изменяет администратора «B» и устанавливает новую роль (ROLE_USER) для администратора «B»

  2. , код вызывает PersonRole.removeAll (personInstanceB) и PersonRole.create (personInstanceB, roleAdmin) , и все обновляется нормально

  3. , в то же время администратор «B» уже вошел в систему, когда их права доступа изменены. Администратор «B» может продолжать работать на страницах с ограниченным доступом ROLE_ADMIN, пока он / она не выйдет из системы и не выполнит новый вход. Только тогда полномочия обновляются и администратор «B» получает новую роль (ROLE_USER)

  4. . Я хочу, чтобы администратор «B» был перенаправлен на страницы ROLE_USER, когда пользователь обновляется с новой ролью, а не только после выхода из системы / входа в систему

  5. вызов springSecurityService.reauthenticate personInstanceB.username) заставляет администратора «A» войти в систему как администратор «B», поэтому это не работает.

Любые идеи приветствуются. Возможно, я пропустил здесь что-то простое, но я понятия не имею, каким будет решение.

Ура, mizzzto

8
задан mizzzto 20 June 2011 в 12:54
поделиться