2016-08-31 2 views
0

Я только что обновил мою установку sylius до последней версии и попытался ввести некоторые элементы авторизации в свой код.Пользователь должен снова войти в зону доступа, предоставленную им

Так что я добавить пользовательскую роль в security.yml файл

- { path: "^/pro-account.*", role: ROLE_PRO } 

Единственная проблема, контроль доступа не обновляется, чтобы соответствовать новой роли, предоставленной пользователю. Когда я перехожу на страницу с маршрутом - app_dev.php/pro-account/providers/ Мне предоставлена ​​страница с запретом доступа.

В области учетной записи я изменил поставщика меню, чтобы отображать дополнительные пункты меню в зависимости от роли. Таким образом, код if ($this->tokenStorage->getToken()->getUser()->hasRole('ROLE_PRO')) { правильно идентифицирует пользователя как пользователя ROLE_PRO. Но система контроля доступа этого не делает.

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

мне нужно добавить дополнительный код в мой код addRole ли

$user = $this->get('security.token_storage')->getToken()->getUser(); 

$user->addRole('ROLE_ADSUP_PRO'); 

$em = $this->getDoctrine()->getManager(); 
$em->persist($user); 
$em->flush(); 

ответ

0

Таким образом, временное решение, которое я нашел, чтобы воссоздать маркер после добавления новой роли для пользователя

$token = new \Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken(
    $user, 
    null, 
    'shop', 
    $user->getRoles() 
); 

$this->container->get('security.context')->setToken($token); 
0

Возможно, этого параметра достаточно? https://stackoverflow.com/a/28781869

security: 
    always_authenticate_before_granting: true 
+0

попытался, чтобы он ничего не изменил, попробуйте снова и убедитесь, что я делаю кеш-память – Brett