Tl; dr Я боюсь, что вам придется ввести собственный механизм, чтобы сделать эту работу.
Токен сеанса хранится внутри сеанса пользователя.Это окажет значительное влияние на производительность вашего приложения, потому что каждый раз, когда требуется запрос к базе данных, чтобы проверить, изменилась ли роль.
Поэтому вам потребуется обработчик запросов который будет сравнивать роль базы данных с текущей ролью пользователя и, если она не совпадает, заменить токен в сеансе, на этот раз новым списком ролей, например.(псевдокод):
sessionUser = tokenStorage.token.user
databaseUser = userRepository.find(sessionUser.id)
if sessionUser.roles !== databaseUser.roles
tokenStorage.setToken(new PostAuthenticationGuardToken(…))
или использовать кеш в качестве носителя флага для уведомления пользователя об изменении.Этот метод наверняка будет намного быстрее.
sessionUser = tokenStorage.token.user
// of course the flag has to be set when the user's role gets changed
cacheToken = 'users.role_reload.' . sessionUser.id
if cache.has(cacheToken)
databaseUser = userRepository.find(sessionUser.id)
tokenStorage.setToken(new PostAuthenticationGuardToken(…))
cache.remove(cacheToken)
В любом случае пользователь должен спросить приложение, было ли изменение роли при каждом запросе.