Не могу проверить, предоставлена ли роль
Я должен установить динамическую роль для пользователя, когда он входит в систему, поэтому я создал сервис LoginSuccessHanlder
с этой функцией при успешном входе в систему:
public function onAuthenticationSuccess(Request $request, TokenInterface $token) {
$response = null;
$user = $this->token->getToken()->getUser();
$poste = $request->get('_poste');
$user->addRole('ROLE_'.strtoupper($poste));
$this->em->persist($user);
$this->em->flush();
if ($this->authorizationChecker->isGranted('ROLE_USER')) {
$response = new RedirectResponse($this->router->generate('homepage'));
$response->headers->setCookie(new Cookie('poste', $poste));
}
return $response;
}
Итак, я добавляю новую роль пользователю благодаря полю в форме входа _poste
, После того, как я вошел в систему, я должен быть в состоянии сделать:
{% if is_granted("ROLE_FLEX") %}
message
{% endif %}
Но нет сообщения
Но если я сделаю это:
{{ dump(app.user.roles) }}
У меня в массиве роль ROLE_FLEX
почему я не могу проверить роль с is_granted
функция? Что я пропустил?
Для информации я использую FOSUserBundle
РЕДАКТИРОВАТЬ
Я удаляю роль каждый раз, когда пользователь выходит из системы, поэтому, когда пользователь выходит из системы, у него нет ROLE_FLEX
больше, но роль будет добавлена, если он проверит эту роль при входе в систему. В основном, у пользователя есть роль для каждого сеанса.
2 ответа
RoleVoter
класс, который используется уровнем безопасности Symfony при передаче роли is_granted()
Функция читает роли из токена, а не из объекта пользователя. Это означает, что вам также придется обновить токен соответствующим образом.
Решение, которое я нашел, состояло в том, чтобы создать мою собственную функцию, чтобы проверить, есть ли у пользователя определенная роль:
public function isGranted($role)
{
return in_array($role, $this->getRoles());
}
теперь я могу использовать {% if app.user.isGranted("ROLE_FLEX") %}