Dans certaines règles de provisionnement (Provisioning Policies), il est parfois nécessaire de construire le DN du manager, par exemple pour alimenter un champ manager dans un annuaire LDAP ou Active Directory, qui sont des DN.
Inutile donc, dans ce cas, de mettre uniquement le matricule ou le nom du manager, il faut soit construire, soit récupérer la valeur du DN du manager dans le service distant.
Voyons comment ceci peut être réalisé dans une PP ITIM, selon les cas.
Attribut Manager Active Directory
Dans le cas d'un service Active Directory, l'adaptateur ITIM pour Windows permet d'alimenter un attribut sur le compte ITIM : erADDistinguishedName.
Il "suffit" donc de pouvoir récupérer cette valeur, en faisant le lien entre le superviseur et son compte. Le Javascript qui fait cela est le suivant :
// The Manager DN must be retrieved from AD account var retval = ""; var mgr = subject.getProperty("supervisor"); if (mgr != null && mgr.length > 0) { var accounts = mgr[0].getProperty("account"); if (accounts != null && accounts.length > 0) { for (i = 0; i < accounts.length; i++) { if (accounts[i].getProperty("erservice")[0] == service.dn) { name = accounts[i].getProperty("erADDistinguishedName"); if (name != null && name.length > 0) { retval = name[0]; } } } } } return retval;
Dans cet exemple, le manager de la personne est stocké dans l'attribut erSupervisor, et on y accède via la propriété supervisor.
Une fois le superviseur identifié (s'il existe), on cherche dans ses comptes celui correspondant au service actuel (AD). S'il y a correspondance, on peut alors récupérer son DN dans l'Active Directory.
Attribut Manager d'un annuaire LDAP
Dans le cas d'un annuaire LDAP, le DN n'est pas remonté par l'adaptateur standard. En effet, la classe d'objet erLDAPUserAccount hérite de inetOrgPerson, et n'ajoute que quelques attributs spécifiques, mais pas le "vrai" DN.
Dans ce cas, on peut, s'il existe des règles simples de construction du DN, construire ce dernier pour alimenter l'attribut manager.
Par exemple :
// build Manager DN, based on its UID + service Users' container // service is implicit to Provisioning Policy var retval = ""; var mgr = subject.getProperty("ersupervisor"); if (mgr != null && mgr.length > 0) { var manager = new Person(mgr[0]); var mgrUID = manager.getProperty("uid"); if (mgrUID != null && mgrUID.length > 0) { var userContainer=service.getProperty("erusercontainer")[0]; retval = "uid=" + mgrUID + "," + userContainer; } } return retval;
On utilise la propriété erusercontainer, définie au niveau du service comme étant la Base DN pour les utilisateurs.
Dans notre exemple, le DN est simplement construit avec l'UID de la personne, sur un seul niveau. S'il y a des sous-branches, il faut les coder dans le javascript.