Au cours du développement de nos divers travaux et projets, il arrive régulièrement que nos utilisateurs soient confrontés à des difficultés, bugs et comportements imprévus par l’application. Bien souvent, il s’avère compliqué pour notre interlocuteur de nous expliquer concrètement ce qu’il se produit et il devient pour nous plus lent et compliqué de localiser la source du problème et surtout de la comprendre.
À travers cet article, nous regarderons comment se faire passer pour l’un de nos utilisateurs afin de voir exactement ce qu’il voit sur son écran sur une application Ruby On Rails.
Prenons pour exemple le cas d’une application de gestion de tickets. Notre utilisateur souhaite créer un nouveau ticket et pour ce faire il sélectionne diverses options et remplit divers champs. Cependant, au moment de soumettre son formulaire, l’application déclenche une erreur peu explicite (par exemple : « We’re sorry but something went wrong »). Au mieux notre utilisateur comprendra qu’un bug s’est produit et nous expliquera clairement sa démarche, au pire nous serons avertis grâce à notre bug tracker que quelque chose s’est mal passé.
Bien évidemment, la plupart du temps, une courte investigation à l’aide du message d’erreur nous permet de trouver la source du problème et de le reproduire, le tester, et le corriger. Mais il existe bien des cas où certains droits, sur un utilisateur spécifique, dans des conditions bien particulières où les choses s’avéreront bien plus compliquées.
Toujours dans notre exemple de ticket, dans le cas où la création s’est bien passée, la personne souhaitera alors le retrouver dans sa liste de tickets. Imaginons que cela ne soit pas le cas et qu’il ne peut pas le voir sur son espace alors que sa configuration est semble-t-il correcte. Dans ce genre de cas, avant de perdre du temps à rechercher l’origine du bug potentiel et de parfois se rendre compte que l’utilisateur avait tout simplement mal configuré son compte, ce que nous voulons faire c’est le reproduire afin de le constater.
Reproduire un bug n’est pas toujours chose aisée, car de nombreuses variables sont à prendre en compte et il peut parfois être long de retrouver exactement les conditions ayant mené à l’erreur. Nous est alors venu la question suivante : Quel meilleur moyen que de comprendre un bug d’un utilisateur autrement qu’en étant ce même utilisateur ?
Devenir son utilisateur n’est pas si simple, vous connaissez normalement son identifiant de connexion (dans la plupart des cas) mais si vous avez correctement géré vos comptes utilisateurs, le mot de passe est totalement crypté et vous ne pourrez alors le deviner afin de vous connecter. Il existe cependant diverses solutions nous permettant de nous connecter en tant qu’un utilisateur sans connaître son mot de passe et toutes sont assez simples d’utilisation et surtout très légères. Dans un premier temps, nous sommes tombés sur deux gems assez populaires : User Impersonate 2 et Pretender. Au vu des retours, il semblait intéressant de mettre en place une de ces deux solutions, mais un problème de taille s’est posé : nous voulions un accès simple depuis Rails Admin et uniquement accessible aux admins. En effet, ces deux outils proposent des méthodes de prise d’identité au sein même de l’application en restreignant leur accès en fonction des rôles. (Un simple utilisateur n’y aurait pas accès tandis qu’un membre du staff le pourrait). Le problème ici est que nous voulions que seuls les admins puissent y avoir accès, pour la simple est bonne raison que nous (Imagile) ainsi que le propriétaire de l’application sommes admins et que personne d’autre ne doit être autorisé à faire usage de cette fonctionnalité.
Nous avons donc poursuivi nos recherches et avons alors trouvé l’outil sobrement nommé Rails Admin Impersonate. Comme son nom l’indique, il va s’intégrer dans notre rails admin et c’est le premier bon point de ce module. Le second bon point et même gros point, c’est sa simplicité d’utilisation.
-
Installation
L’installation et la mise en place de la gem est extrêmement rapide.
- Ajoutons à notre GemFile la ligne
gem 'rails_admin_impersonate'
- Ensuite il faut lancer la commande
$ bundle
. - Il faut ajouter dans le fichier config/initializers/rails_admin.rb dans le bloc config.actions le mot clé ‘impersonate’ (voir capture ci-dessous).
- Redémarrer l’application
-
Explications (photos etc, vidéo)
Ainsi, en 4 étapes, vous avez maintenant à votre disposition en tant qu’admin la possibilité de vous connecter en tant que n’importe lequel de vos utilisateurs exceptés un autre administrateur.
En vous rendant dans votre espace admin, vous constaterez qu’à côté du bouton Voir/Modifier/Supprimer ou autre(s) un bouton avec une petite maison. En cliquant sur cet icône, vous serez alors instantanément connecté en tant que la personne choisie.
-
Amélioration
Ce système bien qu’étant très pratique présente un point négatif : « En tant que qui suis-je connecté à l’instant T ? » Pour pallier à ce problème, nous avons simplement créé une méthode dans notre application controller appelée automatiquement avec un before_filter. Cette méthode va alors regarder si nous sommes connectés en tant qu’admin mais aussi en tant qu’utilisateur et afficher un message nous avertissant que nous sommes potentiellement en train d’utiliser l’identité de quelqu’un d’autre.
Il est important de savoir qu’il en va de notre responsabilité lorsque nous utilisons ce genre d’outil, car nous « usurpons » l’identité d’une personne et qu’il est aussi possible de faire ce que l’on veut ‘en tant que’. Ce outil ne doit servir qu’à faciliter notre compréhension des problèmes et venir en aide plus simplement à nos visiteurs, mais en aucun cas à les traquer ou à se servir de leur identité.
En résumé, la fonction ‘se connecter en tant que’ s’avère être très pratique, mais il est aussi important de faire attention et de restreindre son accès à un parc fermé d’administrateurs de confiance.
Dans le cadre de notre gestion de projet agile, nous aimons échanger de manière claire et précise avec nos clients à propos des utilisateurs de leur plateforme. C’est pourquoi l’utilisation de cette fonctionnalité nous est bien utile pour améliorer l’expérience utilisateur et ainsi faire progresser concrètement les projets.