更新security.context中的角色,无需再次登录

时间:2014-05-13 07:27:33

标签: php symfony fosuserbundle

我在我的项目中使用FOSUserBundle。我有一个控制器AcmeArticleBundle:Edit,它有一个路由前缀/editor。在我的security.yml中,我添加了一个访问控制。

access_control:
    - { path: ^/editor/, role: ROLE_EDITOR }

现在我将ROLE_EDITOR添加到控制器中的用户。但是用户无法访问AcmeArticleBundle:Edit,并且在注销并再次登录之前安全上下文不会更改。

2 个答案:

答案 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);