Подтвердить что ты не робот

Как определить, выдается ли пользователь в Symfony2?

В приложении, создаваемом с помощью Symfony2, мы хотим, чтобы superadmins могли олицетворять других пользователей. Это легко сделать, предоставив суперсуществующему пользователю роль ROLE_ALLOWED_TO_SWITCH. Коммутация реализована с вызовом "где-то? _switch_user =", как предложено в справочной документации.

Однако проблема заключается в том, чтобы обнаруживать в шаблоне, если текущий пользователь фактически олицетворен, чтобы напечатать ссылку на "где-то? _switch_user = _exit" на странице, что позволяет олицетворяющему пользователю вернуться к ее реальному пользователю.

4b9b3361

Ответ 1

Я не использовал Symfony2 некоторое время, поэтому не уверен, но когда вы переключаетесь на другого пользователя, вы получаете все роли, назначенные этому пользователю, и одну дополнительную роль: ROLE_PREVIOUS_ADMIN. Поэтому я предполагаю, что вам нужно всего лишь использовать избирателя, чтобы проверить, назначена ли такая роль для текущего пользователя с использованием избирателя.

// Twig

{% if is_granted('ROLE_PREVIOUS_ADMIN') %}
    <a href="...?_switch_user=_exit">EXIT</a>
{% endif %}

// PHP

<?php if ($view['security']->isGranted('ROLE_PREVIOUS_ADMIN')): ?>
    <a href="...?_switch_user=_exit">EXIT</a>
<?php endif ?>

Ответ 2

Пример того, как получить более подробную информацию об имперсонаторе:

use Symfony\Component\Security\Core\Role\SwitchUserRole;


$sec = $this->get('security.context');

if($sec->isGranted('ROLE_PREVIOUS_ADMIN')) {
  foreach($sec->getToken()->getRoles() as $role) {
    if ($role instanceof SwitchUserRole) {
      $admin_user = $role->getSource()->getUser();
    }
  }
}

Затем у вас есть admin_user в качестве исходного пользовательского объекта. Не забудьте использовать SwitchUserRole.

Ответ 3

Пример того, как отображать имперсонатор в ветке:

{% if is_granted('ROLE_PREVIOUS_ADMIN') %}
  {% for role in app.security.token.roles %}
    {% if role.role == 'ROLE_PREVIOUS_ADMIN' %}
      {{ role.source.user.username }}
    {% endif %}
  {% endfor %}
{% endif %}