symfony2 password is_authenticated_fully symfony impersonation

password - symfony provider



¿Cómo identificar si un usuario está siendo suplantado en Symfony2? (4)

Si necesita probar la función del usuario administrador anterior:

Trabajando en 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 %}

En una aplicación creada con Symfony2, queremos que los superadminarios puedan suplantar a otros usuarios. Esto se hace fácilmente otorgando al usuario de superadmin el rol ROLE_ALLOWED_TO_SWITCH. La conmutación se implementa con una llamada a "somewhere? _Switch_user =" como se sugirió en la documentación de referencia.

Sin embargo, el problema es detectar en una plantilla si el usuario actual es suplantado para imprimir un enlace a "somewhere? _Switch_user = _exit" en la página, lo que permite que el usuario imitador regrese a su usuario real.


Un ejemplo de cómo mostrar impersonator en twig:

{% 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 %}


Un ejemplo de cómo obtener más detalles sobre el imitador:

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

Luego tiene admin_user como el objeto de usuario original. Recuerde usar el SwitchUserRole.


No he usado Symfony2 por un tiempo, así que no estoy seguro, pero cuando cambias a otro usuario ROLE_PREVIOUS_ADMIN todos los roles asignados a ese usuario y un rol adicional: ROLE_PREVIOUS_ADMIN . Así que supongo que todo lo que tiene que hacer es usar el votante para verificar si dicho rol se le asigna al usuario actual que usa el votante.

// 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 ?>