Nuevo en Symfony 4.3: Declaradas obsoletas las clases Role y SwitchUserRole

Uno de los objetivos principales de Symfony es simplificar algunas partes del componente de seguridad. En Symfony 3.3 declaramos obsoleta la interfaz RoleInterface y en Symfony 4.1 hicimos lo mismo con la interfaz AdvancedUserInterface. En Symfony 4.3 hemos decidido declarar obsoletas las clases Role y SwitchUserRole.

En la práctica hay muy pocas ventajas en utilizar clases en vez de cadenas de texto para reprensentar los roles. De hecho, usar clases normalmente es una molestia más que una ayuda, ya que siempre acabas llamando a Role::getRole() para obtener la cadena de texto que reprensenta al nombre del rol.

Si utilizas el framework Symfony entero, no es necesario que hagas ningún cambio en tu código porque seguramente ya utilizas cadenas de texto para los roles. Si utilizas el componente Security suelto, tienes que refactorizar todo el código que utilice la clase Role (o define tu propia clase Role si quieres seguir usando clases).

Por otra parte, si en tu aplicación permites impersonar usuarios, entonces tienes que refactorizar el código que haga uso de SwitchUserRole para utilizar en su lugar la nueva clase SwitchUserToken:

// ANTES
use Symfony\Component\Security\Core\Role\SwitchUserRole;
 
if ($this->security->isGranted('ROLE_PREVIOUS_ADMIN')) {
    foreach ($this->security->getToken()->getRoles() as $role) {
        if ($role instanceof SwitchUserRole) {
            $impersonatorUser = $role->getSource()->getUser();
            break;
        }
    }
}
 
// DESPUÉS
use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
 
$token = $this->security->getToken();
if ($token instanceof SwitchUserToken) {
    $impersonatorUser = $token->getOriginalToken()->getUser();
}

Esta funcionalidad fue contribuida por Christian Flothmann en el pull request #22048.

Fuente: New in Symfony 4.3: Deprecated the Role and SwitchUserRole classes

Comentarios

Publicada el

16 de abril de 2019

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.