2015-06-14 2 views
0

Мое приложение имеет 2 брандмауэров безопасностиНабор Auth маркера вручную для различных брандмауэре

«админ» - используется внутренний персонал

«счет» - используемые клиентами.

Previoly У меня было одно действие под брандмауэром учетной записи, действие в контроллере выглядит примерно так.

$user = //get user somehow 
$token = new UsernamePasswordToken($user, null, 'account', $user->getRoles()); 
$this->get('security.token_storage')->setToken($token); 

С помощью этого кода выше, я был в состоянии «Войти как» разных пользователей, и это работает, но не совсем то, что я хотел.

Однако, когда я перехожу этот код к действию внутри брандмауэра администратора, он вместо этого заменяет токен для брандмауэра администратора, но я все же хочу, чтобы он изменил токен для брандмауэра учетной записи, возможно ли это? (Другими словами, я только хочу, чтобы пользователи-пользователи имели возможность входа в систему как разные пользователи аккаунта)

Я бы предпочел не делиться «контекстом» между брандмауэрами, так как я хотел бы, чтобы кто-то мог быть зарегистрирован в админ и учетные брандмауэры одновременно.

ответ

1

Это может быть немного Hacky, но вручную wiriting маркер на сессии достиг того, что я хотел

$token = new UsernamePasswordToken($user, null, 'account', $user->getRoles()); 
$this->get('session')->set('_security_account',serialize($token)); 
// Needed to prepend "_security_" to the firewall name to get "_security_account" 

Didnt даже нужно вызвать линии, такие как

//Didnt seem to need to call either of these 
$this->get('security.token_storage')->setToken($token); //Symfony 2.6+ 
$this->get('security.context')->setToken($token)