Besoin

Grâce à cette fonctionnalité on doit pouvoir :
  • Importer en une seule fois l'ensemble des utilisateurs d'un annuaire.
  • Resynchroniser en une seule fois des comptes utilisateurs GLPI avec les informations de l'annuaire
Tickets correspondants :
  • #688 : ajout en masse
  • #805 : synchronisation en masse

Fonctionnement attendu

Import

  • Choix de l'annuaire dans la liste des annuaires disponibles
  • Apparition de la liste des utilisateurs LDAP non présents dans la base GLPI
  • Bouton pour importer qui lance l'import des utilisateurs

Les utilisateurs sont importés avec toutes les informations personnelles (voir paramètrage de l'annuaire et des attributs)

Synchronisation

  • Choix de l'annuaire dans la liste des annuaires disponibles
  • Apparition de la liste des utilisateurs LDAP présents dans la base GLPI
  • Bouton pour synchroniser qui lance la synchro des utilisateurs

Les utilisateurs sont synchronisés avec toutes les informations personnelles (voir paramètrage de l'annuaire et des attributs)

Un onglet Synchronisation est ajouté dans le formulaire d'affichage des utilisateurs afin de permettre la resynchronisation immédiate des données de celui-ci.

Scénario

Import

  • L'utilisateur va dans le menu Outils -> Liaison LDAP
  • Un menu apparaît et permet de choisir import ou synchronisation
  • Une fois le menu import choisi, une liste déroulante apparaît, permettant de sélectionner l'annuaire
  • Une fois sélectionné, GLPI récupère la liste de tous les utilisateurs de l'annuaire, et la compare avec celle de sa base. Tous les utilisateurs non présents dans celle-ci seront affichés dans la page d'import.
  • Lorsque la liste des utilisateurs à importer a été validée, GLPI récupère les informations LDAP de chaque personne, et insère le tout en base. La date de dernière modification renseignée et prend la valeur de la date courante

Synchronisation

  • L'utilisateur va dans le menu Outils -> Liaison LDAP
  • Un menu apparaît et permet de choisir import ou synchronisation
  • Une fois le menu synchronisation choisi, une liste déroulante apparaît, permettant de sélectionner l'annuaire
  • Une fois sélectionné, GLPI récupère la liste de tous les utilisateurs de l'annuaire, et la compare avec celle de sa base. Pour chaque utilisateur de l'annuaire, GLPI vérifie :
    • si celui si existe dans la base GLPI
    • si l'attribut LDAP modifyTimestamp (qui détermine la date de dernière modification de l'objet) est plus récent que la date de dernière modification en base
  • Tous les utilisateurs présents et qui doivent être synchronisés seront affichés dans la page de synchro massive
  • Lorsque la liste des utilisateurs à synchroniser a été validée, GLPI récupère les informations LDAP de chaque personne, la met à jour en base. La date de dernière modification renseignée et prend la valeur de la date courante

Script

Un script est disponible pour effectuer les ajouts/synchronisations en masse : scripts/ldap_mass_sync.php . Celui-ci prend 2 paramètres :
  • ldap_server : le nom du serveur LDAP tel que renseigné dans la configuration GLPI
  • action : 0 pour un import, 1 pour une synchronisation

Taches à faire

  • Créer une entrée dans le menu Outils "Liaison LDAP"
  • Créer un script qui permet d'ajouter/synchroniser des utilisateurs depuis un annuaire

Import

  • Créer un formulaire permettant de lister tous les utilisateurs et des les importer

Synchronisation

  • Créer un formulaire permettant de lister tous les utilisateurs et des les synchroniser

Implémentation

Base de données

  • Ajout d'un champs date_mod dans glpi_users : permet de connaître la date de dernière modification de l'utilisateur dans la base GLPI

Fonctionnement de l'ajout d'utilisateur depuis une source externe

Il serait bon de modifier le comportement de cette fonction pour qu'il fasse :
  • on passe un nom d'utilisateur
  • on cherche dans toutes les méthodes d'auth si le nom est présent en tant qu'identifiant
  • une fois qu'on a trouvé la première méthode qui matche on importe le user avec toutes ses infos
  • si le user match aucune méthode, on importe rien, on ne crée pas d'utilisateur