Обновляйте роли в контексте security.context без необходимости повторного входа в систему
Я использую FOSUserBundle в своем проекте. У меня есть контроллер AcmeArticleBundle:Edit
, который имеет префикс маршрута /editor
. И в моей безопасности.в yml я добавил контроль доступа.
access_control:
- { path: ^/editor/, role: ROLE_EDITOR }
Теперь я добавляю ROLE_EDITOR
пользователю в контроллере. Но пользователь не может получить доступ к AcmeArticleBundle:Edit
, и контекст безопасности не изменится до выхода из системы и повторного входа в систему.
3
2 answers
Вы можете обновить роли вручную:
// YourController.php
$roles = $this->getToken()->getUser()->getRoles();
$roles[] = 'ROLE_NEW';
$this->getToken()->getUser()->setRoles($roles);
// Then persist your user entity or the new role will be lost at the next page call
(Код для Symfony2.0
, но он не должен сильно отличаться в 2.4
)
1
Author: COil, 2014-05-13 07:52:15
Наконец-то я нашел решение. Мне пришлось создать новый маркер безопасности и установить его в качестве контекста безопасности.
$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);
0
Author: Mohebifar, 2014-06-24 09:18:01