Symfony 2.1.7 - Обновление маркера безопасности для определенных ролей после аутентификации пользователя

Я хотел бы установить некоторые роли для пользователя после того, как loginSuccess произойдет в соответствии с параметрами, которые зависят от поведения пользователя.

Я посмотрел, и похоже, что роли хранятся в security.content.token, который доступен через контейнер:

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

Я вижу, что роли хранятся в этом токене (в моем случае это FacebookUserToken из FOSFacebookBundle)

Другое требование, которое у меня есть, заключается в том, что я не могу установить Roles и выйти из системы пользователя, он должен быть в том же сеансе.

Это возможно?


person maxwell2022    schedule 26.02.2013    source источник


Ответы (1)


Я нашел этот вопрос: Получить токен безопасности для незарегистрированных пользователь с Symfony

Что помогает мне думать, что я мог бы установить новый токен безопасности (вместо того, чтобы попытаться обновить роли в существующем). Роли моих пользователей не хранятся в таблице пользователей, поэтому это имеет смысл.

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"))
}

Я уверен в этом решении, но я хотел бы получить больше информации, если это возможно.

т.е. Почему бы мне не сделать это так?

person maxwell2022    schedule 27.02.2013