【问题标题】:Switch roles FOSUserBundle切换角色 FOSUserBundle
【发布时间】:2014-08-06 20:30:24
【问题描述】:

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

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

有人说我可以在不重新登录的情况下将用户切换到其他用户,但没有关于角色切换的内容。

也许有人有任何代码示例或其他东西?我阅读了太多难以理解的文档。

【问题讨论】:

  • 查看 FOSUserBundle 用户类 (link):它有 addRole() 和 removeRole() - 究竟是什么阻止了你?
  • 知道用户注册时如何添加角色,但是如何切换呢?
  • 您可以在任何地方(例如您的控制器)调用$user->removeRole('ROLE_FOO'); $user->addRole('ROLE_BAR');,只要您有用户对象(您可以从 fos 用户管理器获得),反之亦然。虽然我不认为角色是为了临时转换。
  • 好的,我会尝试删除和添加角色 - 不错的主意。对于切换用户,您可以建议什么解决方案?我需要切换它们,因为每个组都有不同的功能......
  • 如果您允许用户在这些角色之间随意切换,您也可以同时给他们两个角色?如果您更详细地告诉我们您的项目/意图,这可能会有所帮助,以便我们可以为您提供具体提示。

标签: symfony fosuserbundle


【解决方案1】:

在这里看看我的回答 - 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);

【讨论】:

  • 感谢您的回答!这对我帮助很大。
猜你喜欢
  • 2014-06-05
  • 1970-01-01
  • 2015-06-20
  • 2013-04-18
  • 1970-01-01
  • 2021-10-01
  • 2015-05-18
  • 2020-09-18
  • 1970-01-01
相关资源
最近更新 更多