我在我的项目中使用FOSUserBundle。我有一个控制器AcmeArticleBundle:Edit
,它有一个路由前缀/editor
。在我的security.yml中,我添加了一个访问控制。
access_control:
- { path: ^/editor/, role: ROLE_EDITOR }
现在我将ROLE_EDITOR
添加到控制器中的用户。但是用户无法访问AcmeArticleBundle:Edit
,并且在注销并再次登录之前安全上下文不会更改。
答案 0 :(得分:1)
您可以手动更新角色:
// 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 :(得分:0)
最后我找到了解决方案。我必须创建一个新的安全令牌并将其设置为安全上下文。
$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);