Я пытаюсь выдать себя за другого пользователя в Symfony, но отличается от других примеров, таких как Подражание Symfony — отдельные брандмауэры и отдельные провайдеры пользователей, в моем случае это не только другой поставщик, но и хост.
firewalls:
admin:
pattern: ^/
host: "%host_admin%"provider: admin
[...]
switch_user:
role: ROLE_ADMIN
provider: client
#host: "%host_public%" <-- tried this.. does not work
context: cmb_context
client:
pattern: ^/
host: "%host_public%"provider: client
[...]
switch_user:
role: ROLE_ADMIN
provider: client
context: cmb_context
Таким образом, при такой настройке, когда я пытаюсь выдать себя за пользователя, он остается на сайте администратора и, конечно, клиент, правильно подобранный, не может пройти аутентификацию на стороне администратора. Конечно, при переходе к клиенту сеанс аутентификации там отсутствует.
Я попытался поставить хост для системы, чтобы знать, где выдавать себя за «в» без удачи.
Я мог бы упасть на слушателя, упомянутого в http://symfony.com/doc/current/security/impersonating_user.html#events но я не нашел подробностей о том, как это сделать.
Есть идеи? Заранее спасибо.
chainUserProvider
позволяет вам добавить одного или нескольких провайдеров пользователей вместе, чтобы вы могли выбирать пользователей из этих нескольких источников. Обратите внимание, что порядок, в котором вы добавляете провайдеров в ChainUserProvider, будет иметь значение: как только пользователь будет найден, он проверит этого пользователя, даже если учетные данные этого пользователя не пройдут.
parameters:
chain_providers: "mydatabase1,mydatabase2"
security:
providers:
mydatabase1:
entity:
class: My\UserBundle\Entity\Admin
property: username
mydatabase2:
entity:
class: My\UserBundle\Entity\Customer
property: username
my_chain:
chain:
providers: %chain_providers%
Других решений пока нет …