Недействительный сеанс для определенного пользователя в Symfony2

Я написал систему, в которой фоновый PHP-процесс (написанный с использованием RabbitMQBundle ) обрабатывает сообщения из очереди сообщений. Рабочий процесс обновляет учетные записи пользователей. Это может включать изменение в роли пользователя.

Проблема в том, что пользователь не заметит изменений в своих ролях во время входа в систему. Новые роли будут применяться только после выхода из системы и снова. С точки зрения безопасности это нежелательно. Пользователь должен потерять любую роль, как только администратор удалит права этого пользователя в бэкэнд-системе.

Возникает вопрос: как можно обновить сеанс для конкретного пользователя новыми ролями? Или, когда это невозможно, как сеанс может быть недействительным?

Обратите внимание, что в фоновом процессе у нас нет активного security.context или request который мы можем использовать. Код, подобный этому, поэтому не работает:

 $this->get('security.context')->setToken(null); $this->get('request')->getSession()->invalidate(); 

Вы можете решить это несколькими способами:

1) через security.always_authenticate_before_granting

Вы можете заставить Symfony обновить пользователя по каждому запросу, эффективно перезагружая все роли.

См. Этот вопрос / вопрос: измените роль удаленного пользователя без необходимости переучивать

2) Через EquatableInterface :

Вам необходимо реализовать isEqualsTo(User) который, в свою очередь, должен сравнивать все с классом User , включая роли.

См. Эту ссылку: Создать пользовательский класс

3) Наконец, вы можете использовать DBMS для хранения сеансов. Тогда просто найти запись и удалить ее.