Descontinuadas as Classes Role e SwitchUserRole no Symfony 4.3

Andréia Bohner
1 min readMar 6, 2019

--

Um objetivo de longa data do Symfony é simplificar certas partes do sistema de segurança. No Symfony 3.3, foi descontinuada a RoleInterface e, no Symfony 4.1, foi descontinuada a AdvancedUserInterface. Na versão 4.3, foram descontinuadas as classes Role e SwitchUserRole.

Na prática, há poucos benefícios reais de usar objetos ao invés de strings para representar papéis (roles). Eventualmente, isso apenas levou à sobrecarga porque você tinha que chamar Role::getRole() para obter a string real representando o papel.

Se a sua aplicação usa o framework Symfony full-stack, você provavelmente não precisa mudar nada, porque já está definindo funções com strings originais. Se você usa o componente Security standalone, precisará refatorar qualquer código que esteja lidando com classes Role (ou definir sua própria classe Role para continuar usando classes).

Se você estiver personificando usuários na sua aplicação, precisará refatorar qualquer código que use SwitchUserRolepara usar, em vez dele, o novo SwitchUserToken:

// BEFORE
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;
}
}
}

// AFTER
use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;

$token = $this->security->getToken();
if ($token instanceof SwitchUserToken) {
$impersonatorUser = $token->getOriginalToken()->getUser();
}

Tradução de: New in Symfony 4.3: Deprecated the Role and SwitchUserRole classes

--

--