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