我正在使用FOSUserBundle来处理我的用户。对于他们我有两个角色ROLE_CUSTOMER和ROLE_MANUFACTURER。问题是我需要能够在登录时切换这些角色。有可能吗?我已阅读此文档:
http://symfony.com/doc/current/cookbook/security/impersonating_user.html
据说如何在没有relog的情况下将用户切换到其他用户,但没有关于角色切换的内容。
也许有人有任何代码示例或什么?我读了很多很难理解的文件。
答案 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);