Como recarregar seu usuário após mudanças no Symfony2

Então, cerca de uma semana atrás, fui questionado por que nossa entidade User não tinha as funções adequadas depois que atualizamos as funções. Logo ficou claro que a sessão não foi reiniciada, então o usuário ainda tinha suas permissões antigas até que você as forçasse a atualizá-las.

Depois de algumas pesquisas, descobri este exemplo:

protected function reloadUserPermissions()
{
$token
= new UsernamePasswordToken(
$this
->user,
null,
'main',
$this
->user->getRoles()
);

$this
->securityContext->setToken($token);
}

E entĂŁo tudo estava bem, mas nĂŁo parecia certo fazer toda essa lĂłgica cada vez que algo mudava.

Depois de uma pesquisa mais extensa, descobri que o Symfony já tem uma solução integrada para este problema e Ă© chamada de “EquatableInterface”. Esta interface força vocĂŞ a implementar uma função chamada “isEqualTo (UserInterface $ user)” esta função permite que vocĂŞ verifique se um determinado valor de seu objeto de usuário mudou e se assim for, ele recarregará seu token de usuário.

class User implements EquatableInterface
{

...

public function isEqualTo(UserInterface $user)
{
if ($user instanceof User) {
// Check that the roles are the same, in any order
$isEqual
= count($this->getRoles()) == count($user->getRoles());
if ($isEqual) {
foreach($this->getRoles() as $role) {
$isEqual
= $isEqual && in_array($role, $user->getRoles());
}
}
return $isEqual;
}

return false;
}

Você pode usar qualquer campo vinculado ao seu usuário para forçar uma recarga, tudo o que você precisa retornar é falso e o usuário será recarregado.

fonte: http://api.symfony.com/2.6/Symfony/Component/Security/Core/User/EquatableInterface.html

Todas as minhas dicas foram movidas para o meu blog www.pix-art.be, entĂŁo venha conferir!