A collection of red daruma dolls with white japanese characters.
A collection of red daruma dolls with white japanese characters.

Ajouter la fonctionalité impersonate sur un portail ServiceNow

29 sept. 2025

Cet article explique comment implémenter la fonctionnalité d'impersonalisation sur un portail ServiceNow. Pour rappel, cette fonctionnalité permet de se connecter avec le profil d'un autre utilisateur. Cette fonctionnalité est assez pratique, notamment pour tester ou dans le cadre de résolution pour reproduire des erreurs.

1 - Ajouter la fonction Impersonate dans le profile utilisateur

Client Script

api.controller = function($scope, spModal) {
  $scope.impersonate = function() { 
    spModal.open({
      title: c.data.modalTitle,
      widget: 'impersonate-user',
      scope: scope,
      buttons:[]
    })
  };
)}

2 - Afficher le bouton Impersonate dans le profil utilisateur qui va permettre d'appeler la fonction

Dans cette étape nous allons ajouter un bouton pour appeler la fonction Impersonate.

HTML

<li>
  <a href="javascript:void(0)" ng-click="impersonate()">${Impersonate}</a>
</li>

3 - Vérifier que l'utilisateur connecté a bien la permission de pouvoir s'impersonaliser

Dans le service script, nous allons déclarer une variable qui permet de savoir si l'utilisateur a le droit de s'impersonaliser.

Server Script

(function() {
  data.canImpersonate = new GlideImpersonate().canImpersonate(gs.getUserID());
})

Une fois que c'est fait, nous allons utiliser cette variable dans le code HTML pour afficher la fonction que si l'utilisateur a le droit de s'impersonaliser.

HTML

<li ng-if="c.data.canImpersonate">
  <a href="javascript:void(0)" ng-click="impersonate()">${Impersonate}</a>
</li>

4 - Vérifier si l'utilisateur n'est pas déjà en train d'utiliser la fonction d'Impersonate

Pour ce faire nous allons mettre à jour notre variable canImpersonate dans le server script en vérifiant cette condition.

Service Script

(function() {
  data.canImpersonate = new GlideImpersonate().canImpersonate(gs.getUserID());
  data.isImpersonating = new GlideImpersonate().isImpersonating();

  if(data.isImpersonating){
    data.canImpersonate = false;
  }
})

5 - Ajouter le bouton pour pouvoir arrêter l'impersonification

Si un utilisateur est déjà impersonifier, il voudra avoir la possibilité de pouvoir arrêter l'impersonification. Pour cela nous allons mettre ajouter une fonction dans le client script, puis mettre à jour le code HTML.

Pour ce faire, nous allons utiliser une API standard de ServiceNow :

/api/now/ui/impersonate/${username}

Cette api nécessite de connaitre l'utilisateur qu'on veut impersonifier. Nous allons donc mettre à jour notre code côté en ajoutant une variable qui contient l'identifiant de l'utilisateur :

Server Script

(function() {
  data.realUser = gs.getImpersonatingUserID();
  data.canImpersonate = new GlideImpersonate().canImpersonate(gs.getUserID());
  data.isImpersonating = new GlideImpersonate().isImpersonating();

  if(data.isImpersonating){
    data.canImpersonate = false;
  }
})

Nous avons maintenant toutes les informations pour ajouter le fonction.

Client script

api.controller = function($scope, spModal) {
  $scope.impersonate = function() { 
    spModal.open({
      title: c.data.modalTitle,
      widget: 'impersonate-user',
      scope: scope,
      buttons:[]
    })
  };

  $scope.endImpersonate = function() {
      var userName = c.data.realUser;
      
      //If we don't have a user we can't impersonate
      if (!userName) {
          return;
      }
    
      //Call to the impersonation api with username/sys_id
      $http.post("/api/now/ui/impersonate/" + userName, {}).success(function() {
          $scope.showError = false;
          $window.location.href = $scope.portal.url_suffix;
      }).error(function(response) {
          if (response.error) {
              $scope.showError = true;
              $scope.error = response.error;
          }
      });
)}

Une fois que c'est fait, il ne reste plus qu'à mettre à jour le code HTML pour afficher le bouton si l'utilisateur est impersonifié.

HTML

<li ng-if="c.data.canImpersonate">
  <a href="javascript:void(0)" ng-click="impersonate()">${Impersonate}</a>
</li>
<li ng-if="c.data.isImpersonating">
  <a href="javascript:void(0)" ng-click="endImpersonate()">${Stop Impersonate}</a>
</li>

Bonne nouvelle

Snowlab est agréé au crédit d'impôt innovation.

Une collaboration Snowlab,
ça vous dit ?

Basés à Bordeaux, nous intervenons partout en France pour des projets ServiceNow ambitieux et humains. Contactez-nous pour échanger sur votre projet et découvrir comment nous pouvons optimiser votre Service Portal ServiceNow !

Bonne nouvelle

Snowlab est agréé au crédit d'impôt innovation.

Une collaboration Snowlab,
ça vous dit ?

Basés à Bordeaux, nous intervenons partout en France pour des projets ServiceNow ambitieux et humains. Contactez-nous pour échanger sur votre projet et découvrir comment nous pouvons optimiser votre Service Portal ServiceNow !