Hvordan identifisere hvis en bruker blir etterlignet i Symfony2?

stemmer
22

I et program som er bygd med Symfony2 ønsker vi superadmins å kunne etterligne andre brukere. Dette gjøres enkelt ved å gi Superadmin brukeren ROLE_ALLOWED_TO_SWITCH rolle. Koblings er implementert med en oppfordring til et sted? _Switch_user = som suggesed i referanse dokumentasjon.

Problemet er imidlertid å oppdage i en mal hvis den aktuelle brukeren faktisk er etterlignet, slik som å skrive ut en lenke til et sted? _Switch_user = _exit på siden, slik at det å utgi seg for brukeren å gå tilbake til hennes virkelige brukeren.

Publisert på 16/06/2011 klokken 12:22
kilden bruker
På andre språk...                            


4 svar

stemmer
31

Jeg har ikke brukt Symfony2 for en stund, så jeg er ikke sikker, men når du bytter til en annen bruker du få alle roller tildelt denne brukeren og en ekstra rolle: ROLE_PREVIOUS_ADMIN. Så jeg antar alt du trenger å gjøre er å bruke velgeren for å sjekke om en slik rolle er tildelt den aktuelle brukeren ved hjelp av velgere.

// 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 ?>
Svarte 17/06/2011 kl. 02:49
kilden bruker

stemmer
18

Et eksempel på hvordan du kan få mer informasjon om imitator:

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();
    }
  }
}

Du får deretter admin_user som den opprinnelige brukerobjektet. Husk å bruke SwitchUserRole.

Svarte 01/02/2012 kl. 07:33
kilden bruker

stemmer
2

Et eksempel på hvordan du kan vise imitator i kvist:

{% 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 %}
Svarte 28/03/2013 kl. 11:40
kilden bruker

stemmer
0

Hvis du trenger å teste rolle fra forrige admin bruker:

Arbeid på Symfony 3.4

{% if is_granted('ROLE_PREVIOUS_ADMIN') %}
    {% for role in app.token.roles %}
        {% if role.role == 'ROLE_PREVIOUS_ADMIN' %}
            {% for role_from_previous in role.source.roles if role_from_previous.role == "ROLE_DELETE" %}
                {{ role.source.user.username }} has "ROLE_DELETE"
            {% endfor %}
        {% endif %}
    {% endfor %}
{% endif %}
Svarte 26/04/2018 kl. 09:53
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more