8.5 Importation des comptes en XML
3.2.21 Les comptes utilisateurs peuvent être créés ou modifiés en important un fichier XML de description de comptes. Ce fichier permet d'indiquer les données systèmes des comptes comme le login, le mot de passe, les groupes d'appartenance et les rôles associés.
L'importation purement système utilise le schéma qui ne référence que les données système et aucune donnée documentaire fonctionnelle.
L'importation en plus des données systèmes peut aussi importer des données fonctionnelles si des familles personnalisées ont été définies pour être associées aux comptes.
8.5.1 Importation de compte (XML) depuis l'interface d'administration
Depuis le centre d'administration, dans le gestion des utilisateurs, il est possible d'importer les comptes (utilisateurs, groupes, rôles) depuis un fichier XML.
8.5.2 Importation de compte (XML) en ligne de commande
L'importation peut être réalisée en ligne de commande :
./wsh.php --api=importAccounts --file=/tmp/myUsers.xml --report=/tmp/myReport.json
Son usage est le suivant :
Usage : --file=<the input XML file> Options: --report-file=<the output report file> --dry-run (Analyse file only - no import is proceed)
Le rapport est une sortie texte. Si le nom du fichier à l'extension ".csv" le rapport est au format CSV. Si l'extension est ".json", le format du rapport est en json.
Les informations retournées dans le rapport sont :
- login : identifiant du compté traité
- action : code du traitement effectué
- error : message d'erreur (vide si pas d'erreur)
- message : message du traitement effectuée
- node : nœud XML qui est à l'initiative du traitement au traitement (non retourné pour le type texte)
Si une erreur est détectée aucun compte n'est mis à jour.
8.5.3 Format d'importation XML d'utilisateurs
8.5.3.1 Importation minimaliste d'utilisateurs
Les informations obligatoires pour importer un utilisateur sont :
-
login
: identifiant du compte servant à l'authentification -
lastname
: nom à afficher pour le compte
: le login
est toujours en caractère
minuscule. L'authentification est "case insensitive" pour le login.
Le login sert d'identifiant unique. Si un compte existe avec le login défini, ses informations seront mises à jour. S'il n'existe pas, le compte sera créé.
Exemple minimaliste d'importation de 2 comptes "un" et "deux":
<?xml version="1.0" encoding="utf-8"?> <accounts> <users> <user> <login>un</login> <lastname>Premier</lastname> </user> <user> <login>deux</login> <lastname>Deuxième</lastname> </user> </users> </accounts>
Ce fichier importe 2 comptes utilisateur. Ces comptes n'ont aucun rôle et n'appartiennnent à aucun groupe. Ils n'ont pas de mot de passe et ne peuvent se connecter. Par contre, ils sont opérationnels pour être utilisés dans les profils.
8.5.3.2 Autres informations optionnelles sur le compte
Les informations systèmes optionnelles sont :
mail
: adresse courriel pour le compte. Cette adresse est notamment utilisée pour la procédure de changement de mot de passe et pour les envois de document par courriel.firstname
: prénom de l'utilisateur. Le nom et le prénom constituent le nom à afficher (displayName).status
: (booléen) Permet d'activer ou désactiver un compte. Par défaut, le compte est actif. Mettrefalse
pour le désactiver. Un compte désactivé ne peut plus se connecter.substitute
: (référence) Permet de référencer un suppléant. La référence est le login du compte suppléant. Le suppléant doit être défini avant le titulaire.
Exemple d'importation avec les données optionnelles :
Ce fichier vient compléter les informations du fichier ci-dessus en ajoutant un suppléant pour "un" et les adresses courriels pour les 2 comptes "un" et "deux".
<?xml version="1.0" encoding="utf-8"?> <accounts> <users> <user> <login>deux</login> <lastname>Deuxième</lastname> <firstname>Gérard</firstname> <mail>second@example.net</mail> <status activated="true"/> </user> <user> <login>un</login> <lastname>Premier</lastname> <firstname>Isabelle</firstname> <mail>first@example.net</mail> <status activated="true"/> <substitute reference="deux"/><!-- la référence est défini avant --> </user> </users> </accounts>
8.5.3.3 Mettre un mot de passe
Il est possible de définir un mot de passe lors de la création ou de la modification du compte utilisateur.
La balise password
peut contenir le mot de passe en clair ou crypté.
S'il est en clair, il sera crypté avant enregistrement, sinon il sera enregistré
directement. Le mode de cryptage à utiliser est le SHA256
.
Mot de passe crypté :
<password crypted="true">$5$6gyojNc42P8GMDB4$QbHmquZLRNwye3TjHaiHuoR6JnYmfwp8eWMD/hGLp93</password>
Mot de passe en clair :
<password crypted="false">Mon secret</password>
8.5.3.4 Affecter l'utilisateur à des groupes
Les groupes d'appartenance directe sont définis dans la balise parentGroups
.
Cette balise indique les références aux groupes parents (balises parentGroup
).
L'attribut reset
est un booléen qui indique si les groupes parents déjà
enregistrés doivent être enlevés avant d'ajouter les nouvelles références. Cet
attribut ne sert que dans le cas de mise à jour de compte. Si reset
vaut
false
(valeur par défaut), les références aux groupes sont ajoutés aux
anciens groupes sinon les anciens groupes sont retirés du compte utilisateur.
L'attribut reference
indique la référence du compte groupe et non le nom
logique du document représentant le groupe.
Exemple : ajout des groupes "vigilance" et "security"
<parentGroups reset="false"> <parentGroup reference="vigilance"/> <parentGroup reference="security"/> </parentGroups>
8.5.3.5 Donner des rôles à un utilisateur
Les rôles de l'utilisateur sont définis dans la balise associatedRoles
.
Cette balise indique les références aux différents rôles donnés (balises associatedRole
).
L'attribut reset
est un booléen qui indique si les rôle déjà
enregistrés doivent être enlevés avant d'ajouter les nouvelles références. Cet
attribut ne sert que dans le cas de mise à jour de compte. Si reset
vaut
false
(valeur par défaut), les références aux rôles sont ajoutés aux
anciens rôles sinon les anciens rôles sont retirés du compte utilisateur.
L'attribut reference
indique la référence du rôle et non le nom
logique du document représentant le rôle.
Exemple : ajout des rôles "veterinary" et "surgeon"
<associatedRoles reset="false"> <associatedRole reference="veterinary"/> <associatedRole reference="surgeon"/> </associatedRoles>
8.5.3.6 Exemple récapitulatif
Importation du compte "garde" qui est dans le groupe "security" et qui a le rôle "surveillant".
<?xml version="1.0" encoding="utf-8"?> <accounts date="2016-04-14T09:54:18"> <roles> <role> <reference>surveillant</reference> <displayName>Gardien surveillant</displayName> </role> </roles> <groups> <group > <reference>security</reference> <displayName>Surveillants</displayName> <parentGroups reset="false"> <parentGroup reference="all"/> </parentGroups> </group> </groups> <users> <user> <login>garde</login> <firstname>Robert</firstname> <lastname>Dogue</lastname> <mail>garde@example.net</mail> <status activated="true"/> <password crypted="true">$5$PsPOxUFpskK25TY4$LjEnQqJw76duTmA9G7dd/XC9zexKgNanxz.3virIIRD</password> <associatedRoles reset="false"> <associatedRole reference="surveillant"/> </associatedRoles> <parentGroups reset="false"> <parentGroup reference="security"/> </parentGroups> </user> </users> </accounts>
8.5.4 Importation XML de groupes
8.5.4.1 Importation minimaliste de groupe
Les informations obligatoires pour importer un groupe sont :
-
reference
: référence unique du compte groupe -
displayName
: nom du groupe à afficher
: la reference
est toujours en caractère
minuscule.
Exemple : création du groupe "business".
<?xml version="1.0" encoding="utf-8"?> <accounts> <groups> <group> <reference>business</reference> <displayName>Service commercial</displayName> </group> </groups> </accounts>
8.5.4.2 Définir une arborescence de groupe
Les balises d'affectation de groupe est identique aux celles des utilisateurs.
Exemple :
business sponsor
⇘angels⇙
<?xml version="1.0" encoding="utf-8"?> <accounts > <groups> <group> <reference>business</reference> <displayName>Service commercial</displayName> </group> <group> <reference>sponsor</reference> <displayName>Mécènes</displayName> </group> <group > <reference>angels</reference> <displayName>Business angels</displayName> <parentGroups reset="false"> <parentGroup reference="business"/> <parentGroup reference="sponsor"/> </parentGroups> </group> </groups> </accounts>
8.5.4.3 Donner des rôles à un groupe
Les rôles sont associés à un groupe de la même manière que pour les utilisateurs.
8.5.5 Importation XML de rôles
Les informations obligatoires pour importer un rôle sont :
-
reference
: référence unique du compte rôle -
displayName
: nom du rôle à afficher
: la reference
est toujours en caractère
minuscule.
<?xml version="1.0" encoding="utf-8"?> <accounts> <roles> <role> <reference>watcher</reference> <displayName>Surveillant</displayName> </role> <role> <reference>veterinary</reference> <displayName>Vétérinaire</displayName> </role> </roles> </accounts>
8.5.6 Importation d'utilisateurs avec données fonctionnelles personnalisées
Les comptes sont représentés par des documents. Ces documents permettent d'interagir avec les comptes systèmes.
Les familles utilisées par défaut pour chaque type de compte sont :
La balise document
permet de modifier le document lié au compte.
Elle contient la représentation XML du document lié.
8.5.6.1 Poser un nom logique sur le document associé au compte
Le nom logique est indiqué sur l'attribut name
de la balise du document lié.
Exemple : Mettre le nom logique "USER_CONTROL" sur le compte "control".
<?xml version="1.0" encoding="utf-8"?> <accounts date="2016-04-14T11:40:22"> <users> <user id="1"> <login>control</login> <firstname>Robert</firstname> <lastname>Watson</lastname> <document family="IUSER"> <iuser name="USER_CONTROL" /> </document> </user> </users> </accounts>
8.5.6.2 Modifier le date d'expiration du compte
La date d'expiration n'est pas une donnée du compte système. Elle est définie
dans la famille IUSER
dans l'attribut us_accexpiredate
.
<?xml version="1.0" encoding="utf-8"?> <accounts> <users> <user> <login>watch.garde</login> <firstname>Robert</firstname> <lastname>Dogue</lastname> <mail>garde@example.net</mail> <document family="IUSER"> <iuser name="MY_BIGGARDE" > <us_tab_system> <us_fr_security> <us_accexpiredate>2016-04-13</us_accexpiredate> </us_fr_security> </us_tab_system> </iuser> </document> </user> </users> </accounts>
8.5.6.3 Associer un compte avec une famille personnalisée
Pour utiliser une famille personnalisée, il est nécessaire que celle-ci soit
dérivée des familles par défaut (IUSER
, IGROUP
ou ROLE
).
Le format XML du document associé doit suivre le schéma de la famille donné. L'ensemble des schémas XML nécessaires peut être obtenu depuis le centre d'administration. Il est accessible en cliquant sur le bouton "Importer les comptes" depuis l'interface de gestion des utilisateurs.
Exemple : associer le compte avec un document de la famille "my_watcher". Cette
famille héritant de la famille IUSER
, permet d'indiquer les heures de gardes
et la zone à garder.
<?xml version="1.0" encoding="utf-8"?> <accounts> <users> <user> <login>watch.garde</login> <firstname>Robert</firstname> <lastname>Watson</lastname> <mail>watch.garde@example.net</mail> <associatedRoles reset="false"> <associatedRole reference="surveillant"/> </associatedRoles> <parentGroups reset="false"> <parentGroup reference="all"/> <parentGroup reference="security"/> </parentGroups> <document family="MY_WATCHER"> <my_watcher name="MY_BIGWATCH" > <watch_tab_watching> <watch_fr_watching> <watch_beginhour>10:00:00</watch_beginhour> <watch_endhour>18:00:00</watch_endhour> <watch_array_zone> <watch_zone name="MY_ZONE51">Zone protégée</watch_zone> </watch_array_zone> </watch_fr_watching> </watch_tab_watching> </my_watcher> </document> </user> </users> </accounts>