mad_maximus
@mad_maximus

Как обновить сессию пользователя при смене роли в Symfony?

При смене роли пользователя из админки должны меняться его права, но этого не происходит без разавторизации и авторизации пользователя самостоятельно, так как его данные находятся в текущей авторизационной сессии. Пробовал разные решения:

1. Инвалидировать сессию:
$this->session->invalidate();

2. Рефрешить пользователя провайдером:
$this->userProvider->refreshUser($user);

Кто-то делал такое у себя на проекте, и если да, как решили проблему?
  • Вопрос задан
  • 121 просмотр
Решения вопроса 2
mad_maximus
@mad_maximus Автор вопроса
Вопрос решен:

class RequestSubscriber implements EventSubscriberInterface
{
    /**
     * @var TokenStorageInterface
     */
    private $tokenStorage;

    public function __construct(TokenStorageInterface $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }

    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::REQUEST => 'onRequest'
        ];
    }

    /**
     * @param GetResponseEvent $event
     */
    public function onRequest(GetResponseEvent $event)
    {
        if (!$event->isMasterRequest()) {
            return;
        }

        if (!$token = $this->tokenStorage->getToken()) {
            return;
        }

        $sessionUser = $token->getUser();

        if ($sessionUser instanceof User) {
            $this->tokenStorage->setToken(
                new PostAuthenticationGuardToken($sessionUser, 'main', $sessionUser->getRoles())
            );
        }
    }
}
Ответ написан
prototype_denis
@prototype_denis
Symfony
Всё немного проще

В secutiry.yaml установите значение ключа always-authenticate-before-granting в true

https://symfony.com/doc/4.2/reference/configuratio...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы