Я динамически добавляю роль своему пользователю сразу после входа в систему, используя прослушиватель AuthenticationSuccessHandlerInterface
.Ошибка Symfony2 isGranted ('MY_ROLE') возвращает true, но возвращает брандмауэр 403
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
$user = $this->security->getToken()->getUser();
$user->addRole('MY_ROLE');
var_dump($this->security->isGranted('MY_ROLE'));
var_dump($this->security->getToken()->getRoles()); die;
return new RedirectResponse('...');
}
И var_dump() показывает $user
получил новое право. Я сделал User
класс реализует класс EquatableInterface
и создал функцию isEqualTo
, чтобы получить мои данные пользователя, перезагруженные, когда я меняю его без необходимости выхода из системы.
public function isEqualTo(UserInterface $user)
{
return false;
}
Но когда мой слушатель Перенаправление достиг, я в белых страницах в Access Denied
без профилировщика на этой странице.
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login/check$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: MY_ROLE }
Я уже попытался установить в классе роли (в коде не динамически), он работает так, что мой брандмауэр, работает динамически набор данных, за исключением, даже если я перезагрузить пользователь.
У вас есть мысли, что вы хотите сделать неправильно?
После перенаправления ваша роль будет потеряна. Убедитесь, что вы сохранили его в базе данных. – Valdas
Почему вы добавляете роль пользователю, но затем вызываете 'getRoles()' на токен? – xabbuh
@xabbuh Потому что он хочет посмотреть, правильно ли установлена роль для пользователя. – KhorneHoly