Archives mensuelles : mars 2019

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 :

firewalls:
    main:
        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 :

$user->setRoles(['ROLE_ALLOWED_TO_SWITCH']);

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

gponty@e721fa3a3f95:/var/www/userDemo2018$ php bin/console doctrine:fixtures:load

 Careful, database "userdemo" will be purged. Do you want to continue? (yes/no) [no]:
 > yes

   > purging database
   > loading App\DataFixtures\UserFixtures
gponty@e721fa3a3f95:/var/www/userDemo2018$ 

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 :

    {% if is_granted('ROLE_PREVIOUS_ADMIN') %}
        <a href="{{ path('homepage', {'_switch_user': '_exit'}) }}">Exit User</a>
    {% endif %}
    <table>
        {% for user in users %}
            <tr>
                <td>{{ user.email }}</td>
                <td>{{ user.nomComplet }}</td>
                <td><a href="{{ path('homepage', {'_switch_user': user.email}) }}">Switch!</a></td>
            </tr>
        {% endfor %}
    </table>

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 !

Test de la distro Linux Elementary

Ca faisait pas mal de temps que je suivais Elementary, je l’avais testé à plusieurs reprises mais elle n’était pas encore assez mature pour que j’en fasse ma distro de travail.

Un peu influencé par le fait qu’elle soit dans le top 5 de distrowatch et avec la sortie de la version 5.0 (Juno) j’ai décidé de me lancer et de l’utiliser à plein temps.

Et après quelques semaines d’utilisation je dois dire que je suis assez déçu, il y a pas mal de détail assez énervant, dont voici quelques exemples :

  • Il y a très peu d’applications fournies avec, et même pas un pauvre éditeur de texte
  • Un bug qui fait que les fenêtre de certaines applications sont « doublés » (bug connu)
  • Il faut bidouiller pour désactiver l’économiseur d’écran (en passant par le menu paramètres ça ne fonctionne pas : bug connu)
  • Et surtout, le copier coller entre le terminal et une appli externe (genre navigateur) ne fonctionne pas !

Pas mal de petits détails qui au quotidien rends la distro très agaçante, je vais donc me tourner vers la MX Linux, ou sinon je reviendrai à l’incontournable Linux Mint.