切换角色FOSUserBundle

时间:2014-08-06 20:30:25

标签: symfony fosuserbundle

我正在使用FOSUserBundle来处理我的用户。对于他们我有两个角色ROLE_CUSTOMER和ROLE_MANUFACTURER。问题是我需要能够在登录时切换这些角色。有可能吗?我已阅读此文档:

http://symfony.com/doc/current/cookbook/security/impersonating_user.html

据说如何在没有relog的情况下将用户切换到其他用户,但没有关于角色切换的内容。

也许有人有任何代码示例或什么?我读了很多很难理解的文件。

1 个答案:

答案 0 :(得分:3)

在这里查看我的答案 - Symfony 2.3: How do I refresh the authenticated user from the database?

关键是你需要在切换角色后重置令牌。

这样的事情:

$loggedInUser = $this->get('security.context')->getToken()->getUser();
$loggedInUser->removeRole('ROLE_ABC');
$loggedInUser->addRole('ROLE_XYZ');

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

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