Switch user

Une des fonctionnalités de Symfony que j’utilise dans tous mes projets est la possibilité d’être connecté à la place d’un autre utilisateur (ou de « impersonate a User » selon le terme de Symfony).

Très utile quand vous avez le client au bout du fil qui vous dit que ça ne fonctionne pas alors que chez vous ça fonctionne (un petit « switch user » plus tard, vous vous rendrez compte qu’il y a bien un bug spécifique à son profil)

On va repartir du source sur github « userdemo2018″ que nous avons écrit pour l’article http://blog.dev-web.io/2018/10/30/symfony-4-gestion-utilisateurs-sans-fosuserbundle-v2018-chapitre-1/

Pour ça il n’y a pas besoin de package particulier, il faut juste modifier la config pour activer cette fonctionnalité, ça se passe dans le fichier security.yaml, il faut ajouter un switch_user à true :

Il faut maintenant affecter le rôle ROLE_ALLOWED_TO_SWITCH aux utilisateurs qui auront la possibilités de switcher sur un autre user, pour ça on va tout simplement modifier nos fixtures :

Et ne pas oublier de les relancer après la modif :

On peut tout de suite tester en se rendant à n’importe quelle adresse de votre site et ajouter à la fin de l’URL : ?_switch_user=userdemo5@example.com

Pour être sûr que ça a fonctionné il suffit de jeter un oeil à la debug toolbar, vous devriez voir l’adresse de l’utiliser switché s’afficher, et pour sortir du mode « switch » et revenir à votre profile, il faut cliquer sur « Exit Impersonation »

On va aller un peu plus loin afin de faire quelque chose d’un peu plus sexy et faire un tableau des utilisateurs avec un lien pour switcher et un lien pour sortir du « switch », tout va se passer dans la vue twig :

Plusieurs remarques :
L’utilisateur à l’origine du switch a un nouveau rôle : ROLE_PREVIOUS_ADMIN, ce qui nous permet de tester si on est en train de switch ou pas
Pour sortir d’un « switch » il suffit d’ajouter _switch_user=_exit à la fin de l’URL
Vous ne pouvez pas switcher sur un autre utilisateur si vous avec déjà un switche en cours, il faut d’abord en sortir.

A vous de jouer ! Pour ma part je fais mon baluchon pour Paris et la Symfony Live qui va se dérouler jeudi et vendredi !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.