2

ユーザーの行動に依存するパラメーターに従って loginSuccess が発生した後、ユーザーにいくつかのロールを設定したいと思います。

調べたところ、コンテナからアクセスできる security.content.token にロールが格納されているようです。

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

ロールがこのトークンに格納されていることがわかります (私の場合はFacebookUserTokenfrom FOSFacebookBundle)

私が持っている他の要件はRoles、ユーザーを設定してログアウトできないことです。同じセッションにいる必要があります。

それは可能ですか?

4

1 に答える 1

5

この質問を見つけました: 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"))
}

私はこの解決策に自信を持っていますが、可能であればさらに情報を提供してください。

すなわち。なぜ私はこのようにすべきではないのですか?

于 2013-02-27T00:41:44.877 に答える