Nuevo en Symfony 5.1: Seguridad más sencilla
Para comprobar el estado de los usuarios en tu aplicación Symfony (anónimo,
logueado, etc.) debes usar atributos de seguridad como IS_AUTHENTICATED_ANONYMOUSLY
.
Estos atributos son confusos a veces porque no comprueban realmente el estado del
usuario sino que comprueban que se cumpla una condición.
Por ejemplo, el atributo IS_AUTHENTICATED_REMEMBERED
es cierto tanto para los
usuarios creados mediante "Remember Me" como para los usuarios autenticados
por ejemplo con usuario y contraseña. En otras palabras, IS_AUTHENTICATED_REMEMBERED
no significa "que sea Remember Me" sino "que sea al menos Remember Me".
Por eso, en Symfony 5.1 hemos añadido nuevos atributos de seguridad que solo comprueban el estado del usuario. Por ejemplo, para comprobar dentro de un controlador si el usuario es "Remember Me":
// Antes if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED') && !$this->isGranted('IS_AUTHENTICATED_FULLY')) { // ... } // Después if ($this->isGranted('IS_REMEMBERED')) { // ... }
Otro ejemplo, esta vez para comprobar si el usuario es anónimo dentro de una plantilla Twig:
{# Antes #} {% if is_granted('IS_AUTHENTICATED_ANONYMOUSLY') and not is_granted('IS_AUTHENTICATED_REMEMBERED') and not is_granted('IS_AUTHENTICATED_FULLY') %} {# ... #} {% endif %} {# Después #} {% if is_granted('IS_ANONYMOUS') %} {# ... #} {% endif %}
Esta funcionalidad fue contribuida por Jules Pietri y Wouter De Jong en el pull request #31189.
Nuevo atributo para impersonar usuarios
La impersonación de usuarios te permite navegar la aplicación como si fueras
otro usuario. Cuando se usa la impersonación, al usuario actual se le asigna
automáticamente un rol llamado ROLE_PREVIOUS_ADMIN
. Así es como puedes
detectar si el usuario actual está impersonando o no.
No obstante, usar roles como si fueran atributos no es totalmente correcto. Además,
el nombre del rol es un poco confuso. Así que en Symfony 5.1 hemos declarado
obsoleto el rol ROLE_PREVIOUS_ADMIN
y hemos añadido un nuevo atributo llamado
IS_IMPERSONATOR
. Así tu código y tus plantillas serán mucho más fáciles de entender:
{# Antes #} {% if is_granted('ROLE_PREVIOUS_ADMIN') %} <a href="...">Exit impersonation</a> {% endif %} {# Después #} {% if is_granted('IS_IMPERSONATOR') %} <a href="...">Exit impersonation</a> {% endif %}
Esta funcionalidad fue contribuida por Wouter De Jong en el pull request #35858.
Fuente: New in Symfony 5.1: Simpler security attributes
Comentarios
Proyectos Symfony destacados
La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.