Контроль доступа Symfony Security не реагирует на изменения пользователя в БД - PullRequest
0 голосов
/ 28 февраля 2019

Моему провайдеру пользователя присвоено значение «Пользовательский объект».

У объекта есть модель getRoles (), и он работает правильно.

Моя проблема заключается в следующем:

  • На веб-сайте есть две роли пользователя ( Администратор и Обычный )
  • Обычный пользователь не может получить доступ к созданию объекта ( access_control установлено, чтоэто могут делать только администраторы)
  • Пользователь входит в систему, пока у него есть роль ' Обычная '
  • Я иду и редактирую эту ' Обычную 'Пользователь в БД и установите его в «Администратор»
  • Пользователь все еще вошел в систему, access_control все еще обрабатывает его как ' Обычный '
  • $ this-> getUser () -> getRoles () имеет роль ' Admin '.
  • Пользователь по-прежнему не может получить доступ к маршруту создания объекта, поскольку access_control предполагает, что он по-прежнему ' Обычный '
  • Он должен повторно войти в систему, и только тогда access_control позволяет ему получить доступ к маршруту создания Объекта.

Как мнесделать так, чтобы изменения базы данных были применены к сеансу без выхода из системы?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Я пошел с избирателями Symfony: https://symfony.com/doc/current/security/voters.html

Невозможно достичь этого без роли безопасности без выхода из системы.

0 голосов
/ 01 марта 2019

Я думаю этот вопрос похож на ваш.Принятый ответ:

$user = $this->getUser();
$user->addRole('ROLE_ADMIN');
$this->get('fos_user.user_manager')->updateUser($user);
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.context')->setToken($token);
...