Symfony 2.1.7 - 在用户通过身份验证后更新安全令牌设置特定角色

时间:2013-02-26 07:54:55

标签: security symfony-2.1 user-roles

我想根据依赖于用户行为的参数在loginSuccess发生后为用户设置一些角色。

我看了一眼,看起来角色存储在security.content.token中,可以通过容器访问:

$this->container->get('security.context')->getToken()

我可以看到角色存储在此令牌中(在我的情况下是FacebookUserToken中的FOSFacebookBundle

我的另一个要求是我无法设置Roles并注销用户,它必须在同一个会话中。

这可能吗?

1 个答案:

答案 0 :(得分:5)

我发现了这个问题:Get security token for non-logged user with Symfony

这让我觉得我可以设置一个新的安全令牌(而不是尝试更新现有的角色)。我的用户的角色不存储在User表中,因此它是有意义的。

public function strangeAction()
{
    // Get your User, however you normally get it
    $user = $userRepository->find($id);

    // Save the original token in the session (just in case I need to reverse it)
    $originalToken = $this->get("security.context")->getToken();
    $this->getRequest()->getSession()->set('original.security.token', $originalToken);

    // Create my new custom token (loading the roles of the user)
    $token = new UsernamePasswordToken($user, null, "main", $user->getRolesMagically());

    // Update the security context with the new token
    $this->get("security.context")->setToken($token);

    // Now you have access to isGranted()
    if ($this->get("security.context")->isGranted("ROLE_SOMETHING"))
}

我对这个解决方案充满信心,但如果可能的话,我想要更多的输入。

即。我为什么不这样做?