У меня есть приложение, в котором администратор часто действует от имени обычных пользователей. Поток выглядит следующим образом:Выйти из коммутируемого пользователя программно
- администратор журналы на
- Администратора представлен список пользователей, не администратор
- Администратор нажимает на ссылку пользователя без прав администратора
<a href="{{ path('_main_app', {'_switch_user': user.username}) }}">
- Администратор делает свое дело как пользователь
- щелчки администратора браузера назад, пока они не находятся в списке пользователей, не администратора снова
на данный момент администратор страницы ш ows a <a href="{{ path('_admin', {'_switch_user': '_exit'}) }}">Exit {{app.user.username}} </a>
Однако пользователи-администраторы часто забывают щелкнуть по нему и вместо этого нажать на другого пользователя, не являющегося администратором. Когда они это делают, они получают сообщение You are already switched to User XXX. Очевидно, что это предназначено, но для пользователей admin это еще не большой опыт.
Каким будет рекомендуемый подход, позволяющий администраторам переключаться между пользователями таким образом? Я бы подумал, что при вызове {'_switch_user': '_exit'}
каждый раз, когда они попадут в список обычных пользователей, будет хороший вариант (наряду с тем, что эта страница никогда не будет кэшироваться), но я не вижу способа сделать это программно.
Другим способом может быть URL-адрес {'_switch_user': '_exit'}
в Javascript, но это кажется очень неудовлетворительным.
Каким будет рекомендуемый подход?
Спасибо @ Joe, это похоже на хороший подход. У меня нет файла 'services.yml'? Я попробовал добавить этот конфиг в свои файлы 'config.yml' и' security.yml', но оба ошибки бросают: 'FileLoaderLoadException: не удается импортировать ресурс" app/config/config.yml "из" config_dev.yml ". (Нет расширения, способного загрузить конфигурацию для «security.authentication.switchuser_listener» (в config.yml). Посмотрел на пространство имен «security.authentication.switchuser_listener», нашел «security», «fos_user», ) ' –
Lewis42
Если у вас нет сервиса.yml в вашем Bundle, вы можете просто создать его под пакетомName/Resources/config/services.yml. В качестве альтернативы, в DocRoot/app/config/services.yml, который может быть использован, должен быть по крайней мере стандартный по умолчанию (с учетом чистой установки sf2). Возьмите alook в http://symfony.com/doc/current/service_container.html, чтобы немного погрузиться в тему контейнера DI – Joe