Skip to content
Snippets Groups Projects
Commit 83cab0ab authored by Quentin CHEVALIER's avatar Quentin CHEVALIER
Browse files

correction doc Tools

parent 946b3099
No related branches found
No related tags found
No related merge requests found
...@@ -136,7 +136,7 @@ export class Tools { ...@@ -136,7 +136,7 @@ export class Tools {
try { try {
if (domain == "group") var dirtyId = ldapConfig.group.gid; if (domain == "group") var dirtyId = ldapConfig.group.gid;
else var dirtyId = ldapConfig.user.uid; else var dirtyId = ldapConfig.user.uid;
dirtyId += "="+ldapEscape.filter("${txt}", { txt: id }) + "," + ldapConfig.dn[domain]; dirtyId += "=" + ldapEscape.filter("${txt}", { txt: id }) + "," + ldapConfig.dn[domain];
return await Basics.searchSingle(domain, ldapConfig[domain][category], dirtyId); return await Basics.searchSingle(domain, ldapConfig[domain][category], dirtyId);
} }
catch(err) { catch(err) {
...@@ -236,11 +236,11 @@ export class Tools { ...@@ -236,11 +236,11 @@ export class Tools {
/** /**
* @memberof LDAP * @memberof LDAP
* @summary Fonction essentielle qui permet d'ajouter un utilisateur à une catégorie d'un groupe. * @summary Fonction essentielle qui permet d'ajouter un utilisateur à une catégorie d'un groupe.
* @desc Cette fonction fait essentiellement appel à d'autres fonctions de {@link Tools} ; {@link Tools.addIfNotPresent} et {@link Tools.manageInclusions}. * @desc Cette fonction fait essentiellement appel à d'autres fonctions de {@link Tools} ; {@link Tools.addIncluded} et {@link Tools.addIfAbsent}.
* Puis elle gère en interne la récursion et utilise {@link LDAP.change} pour cela. * Elle utilise {@link LDAP.addDFS} pour gèrer la récursion.
* @arg {string} uid - Identifiant du futur membre * @arg {string} uid - Identifiant du futur membre
* @arg {string} gid - Identifiant du groupe * @arg {string} gid - Identifiant du groupe
* @arg {"admins"|"speakers"|"members"|"followers"} category - Categorie de l'utilisateur concerné (admin, speaker, member ou follower) * @arg {"admins"|"speakers"|"members"|"followers"} category - Categorie de l'utilisateur concerné au type non contraint mais en pratique limité
* @return {Promise(boolean)} `true` si la modification s'est bien déroulée, false sinon * @return {Promise(boolean)} `true` si la modification s'est bien déroulée, false sinon
* @async * @async
* @static * @static
...@@ -261,8 +261,8 @@ export class Tools { ...@@ -261,8 +261,8 @@ export class Tools {
/** /**
* @memberof LDAP * @memberof LDAP
* @summary Fonction intermédiaire naïve. * @summary Fonction intermédiaire naïve qui supprime une entrée d'une feuille si elle y existe.
* @desc Cette fonction enlève 2 d'1 pour un des deux arbres si cette entrée n'était pas déjà absente. * @desc Cette fonction enlève 2 d'1, feuille d'un des deux arbres si cette entrée y existe.
* La symétrie entre 1 et 2 est voulue et permet de gérer indifférement l'ajout d'un individu dans un groupe ou d'un groupe à un individu. * La symétrie entre 1 et 2 est voulue et permet de gérer indifférement l'ajout d'un individu dans un groupe ou d'un groupe à un individu.
* @arg {string} id1 - uid/gid * @arg {string} id1 - uid/gid
* @arg {"group"|"user"} domain1 - Arbre concerné pour l'id1 * @arg {"group"|"user"} domain1 - Arbre concerné pour l'id1
...@@ -299,12 +299,12 @@ export class Tools { ...@@ -299,12 +299,12 @@ export class Tools {
/** /**
* @memberof LDAP * @memberof LDAP
* @summary Fonction intermédiaire. * @summary Fonction intermédiaire de suppression des droits obtenus par inclusion.
* @desc Cette fonction gère les inclusions de droits. Elle ne rajoute pas un admin pour les admins, mais elle le rajoute en tant que speaker. * @desc Cette fonction gère les inclusions de droits, et donc les rétrogadations. Elle ne supprime pas un admin pour les admins, mais le rajoute en tant que speaker.
* Cette fonction appelle {@link remove} directement pour vraiment éliminer le personnage. * Cette fonction appelle {@link remove} directement pour vraiment éliminer le personnage des rôles inclus et {@link add} pour vraiment le rajouter.
* @arg {string} uid - uid de l'utilisateur à ajouter * @arg {string} uid - uid de l'utilisateur à ajouter
* @arg {string} gid - gid du groupe concerné * @arg {string} gid - gid du groupe concerné
* @arg {"admins"|"speakers"|"members"|"followers"} category - Categorie de l'utilisateur concerné (admin, speaker, member ou follower) * @arg {"admins"|"speakers"|"members"|"followers"} category - Categorie de l'utilisateur concerné
* @return {Promise(boolean)} `true` si la modification s'est bien déroulée, `false` sinon * @return {Promise(boolean)} `true` si la modification s'est bien déroulée, `false` sinon
* @async * @async
* @static * @static
...@@ -312,10 +312,17 @@ export class Tools { ...@@ -312,10 +312,17 @@ export class Tools {
static async remIncluded(uid: string, gid: string, category: string): Promise<boolean> { static async remIncluded(uid: string, gid: string, category: string): Promise<boolean> {
switch (category) { switch (category) {
case "members": case "members":
Tools.remove(uid, gid, "admins");
Tools.remove(uid, gid, "speakers"); Tools.remove(uid, gid, "speakers");
break;
case "speakers": case "speakers":
Tools.remove(uid, gid, "admins"); Tools.remove(uid, gid, "admins");
// Speaker -> member
Tools.add(uid, gid, "member");
break;
case "admins": case "admins":
// Admin -> speaker
Tools.add(uid, gid, "speaker");
case "followers": case "followers":
break; break;
} }
...@@ -324,12 +331,13 @@ export class Tools { ...@@ -324,12 +331,13 @@ export class Tools {
/** /**
* @memberof LDAP * @memberof LDAP
* @summary Fonction intermédiaire de récursion. * @summary Fonction intermédiaire de récursion à la suppression.
* @desc Cette fonction gère les droits par récursion par une classique Depth First Search. * @desc Cette fonction gère les droits par récursion par une classique Depth First Search.
* Cette fonction agit uniquement sur l'arbre User, de façon à différencier rôles stricts de rôles hérités. * Cette fonction agit uniquement sur l'arbre User, de façon à différencier rôles stricts de rôles hérités.
* @arg {string} uid - uid de l'utilisateur à ajouter * Elle est sans effet sur les groupes où l'utilisateur dispose de rôles stricts.
* @arg {string} gid - gid du groupe concerné * @arg {string} uid - uid de l'utilisateur à supprimer
* @arg {boolean} direction - direction de la recursion * @arg {string} gid - gid du groupe à l'origine de la récursion
* @arg {boolean} direction - direction de la recursion (true pour ascendant)
* @return {Promise(boolean)} `true` si la modification s'est bien déroulée, `false` sinon * @return {Promise(boolean)} `true` si la modification s'est bien déroulée, `false` sinon
* @async * @async
* @static * @static
...@@ -351,7 +359,7 @@ export class Tools { ...@@ -351,7 +359,7 @@ export class Tools {
var to_visit = [gid]; var to_visit = [gid];
while (to_visit.length > 0) { while (to_visit.length > 0) {
let cur_gid = to_visit.pop(); let cur_gid = to_visit.pop();
// Si le statut de uid dans cur_gid est sun statut strict on arrête de boucler // Si le statut de uid dans cur_gid est un statut strict on arrête de boucler
for (let cat of checks) if ((await Tools.get(gid, "group", cat)).includes(uid)) continue; for (let cat of checks) if ((await Tools.get(gid, "group", cat)).includes(uid)) continue;
// Sinon on le tue et on boucle // Sinon on le tue et on boucle
Tools.remIfPresent(uid, "user", cur_gid, "group", rol); Tools.remIfPresent(uid, "user", cur_gid, "group", rol);
...@@ -364,40 +372,26 @@ export class Tools { ...@@ -364,40 +372,26 @@ export class Tools {
* @memberof LDAP * @memberof LDAP
* @summary Fonction qui permet de supprimer un membre d'une catégorie existant d'un groupe. * @summary Fonction qui permet de supprimer un membre d'une catégorie existant d'un groupe.
* @desc Cette fonction fait essentiellement appel à d'autres fonctions de {@link Tools} passées en argument et {@link LDAP.change}. * @desc Cette fonction fait essentiellement appel à d'autres fonctions de {@link Tools} passées en argument et {@link LDAP.change}.
* Elle essaie d'assurer les propriétés d'inclusion et de récursion du LDAP. Elle est sans effet pour un admin hérité. * Elle essaie d'assurer les propriétés d'inclusion et de récursion du LDAP (voir {@link remDFS} pour la récursion). Elle est sans effet pour un admin hérité.
* Le comportement est étrange pour la suppression d'un membre hérité ; le membre est supprimé du groupe et des groupes parents, mais pas du groupe à l'origine de l'héritage. * Le comportement est étrange pour la suppression d'un membre hérité ; le membre est supprimé du groupe et des groupes parents, mais pas du groupe à l'origine de l'héritage.
* @arg {string} uid - Identifiant de l'ex-membre * @arg {string} uid - Identifiant de l'ex-membre
* @arg {string} gid - Identifiant du groupe * @arg {string} gid - Identifiant du groupe
* @arg {"admins"|"speakers"|"members"|"followers"} category - Categorie de l'utilisateur concerné (admin, speaker, member ou follower) * @arg {"admins"|"speakers"|"members"|"followers"} category - Categorie de l'utilisateur concerné au type non contraint mais en pratique limité
* @return {Promise(boolean)} `true` si la modification s'est bien déroulée, `false` sinon * @return {Promise(boolean)} `true` si la modification s'est bien déroulée, `false` sinon
* @async * @async
* @static * @static
*/ */
static async remove(uid: string, gid: string, category : string): Promise<boolean> { static async remove(uid: string, gid: string, category : string): Promise<boolean> {
// Invulnérabilité pour les admins hérités // Invulnérabilité pour les admins hérités (par définition, un admin hérité est dans User pas dans Group)
if ((await Tools.get(gid, "group", "admins")).includes(uid) || !(await Tools.get(uid, "user", "admins")).includes(gid)) { if ((await Tools.get(gid, "group", "admins")).includes(uid) || !(await Tools.get(uid, "user", "admins")).includes(gid)) {
Tools.remIfPresent(uid, "user", gid, "group", category); Tools.remIfPresent(uid, "user", gid, "group", category);
Tools.remIfPresent(gid, "group", uid, "user", category); Tools.remIfPresent(gid, "group", uid, "user", category);
// Gestion des droits par inclusion // Gestion des droits par inclusion (et éventuelle rétrogadation)
Tools.remIncluded(uid, gid, category); Tools.remIncluded(uid, gid, category);
// Rétrogradation // Gestion des droits récursive
switch (category) { if (category == "admins") Tools.remDFS(uid, gid, true);
case "admins": // Uniquement pour des membres ; sinon modification localisée au groupe
// Gestion des droits récursive if (category == "members") Tools.remDFS(uid, gid, false);
Tools.remDFS(uid, gid, true);
// Admin -> speaker
Tools.add(uid, gid, "speaker");
break;
case "speakers":
// Speaker -> member
Tools.add(uid, gid, "members");
break;
case "members":
// Gestion des droits récursive
Tools.remDFS(uid, gid, false);
case "followers":
break;
}
} }
return true; return true;
} }
...@@ -461,7 +455,7 @@ export class Tools { ...@@ -461,7 +455,7 @@ export class Tools {
return Tools.ensureUnique((givenName+'.'+lastName).toLowerCase().normalize('UFD'), att, "user", (id: string, n: number) => { return Tools.ensureUnique((givenName+'.'+lastName).toLowerCase().normalize('UFD'), att, "user", (id: string, n: number) => {
if (n=1) id+='.'+promotion; // Si prénom.nom existe déjà, on rajoute la promo if (n=1) id+='.'+promotion; // Si prénom.nom existe déjà, on rajoute la promo
else if (n=2) id+='.'+(n-1).toString(); // Puis si prénom.nom.promo existe déjà on passe à nom.prenom.promo .1 else if (n=2) id+='.'+(n-1).toString(); // Puis si prénom.nom.promo existe déjà on passe à nom.prenom.promo .1
else if (n>2) id+=n; // Ensuite on continue .123, .1234, etc... else if (n>2) id+=(n-1).toString(); // Ensuite on continue .123, .1234, etc...
return id; return id;
}); });
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment