diff --git a/src/ldap/export/group.ts b/src/ldap/export/group.ts index 24f61f32824bd228384f4ba1f7d2d2d66a14e8be..442c29a6e8bdc43e8696f0f0dbe8b818193a5659 100644 --- a/src/ldap/export/group.ts +++ b/src/ldap/export/group.ts @@ -23,7 +23,7 @@ export class Group { /** * @memberof LDAP * @summary Fonction qui renvoit toutes les infos relatives à un groupe particulier. - * @desc Cette fonction utilise {@link Tools.peek} avec l'interface {@link groupData}. + * @desc Cette fonction utilise {@link Tools.peek} avec l'interface {@link groupData}. Elle rajoute les individus * @arg {string} gid - Identifiant du groupe * @return {Promise(groupData)} Informations recueillies ; renvoie une liste de dictionnaire avec le profil complet du groupe au format {@link groupData}. * @static @@ -59,19 +59,14 @@ export class Group { /** * @memberof LDAP * @summary Fonction qui permet de rajouter un administrateur à un groupe. - * @desc Cette fonction fait essentiellement appel à {@link Tools.add}. Le nouvel administrateur devient aussi membre et porte-parole du groupe, - * mais hérite aussi de son statut d'administrateur sur tous les groupes qui héritent du sien. + * @desc Cette fonction fait essentiellement appel à {@link Tools.add}. Le nouvel administrateur ne devient pas membre ou porte-parole du groupe pour autant ! * @arg {string} uid - Identifiant du membre futur admin * @arg {string} gid - Identifiant du groupe * @return {boolean} `true` si la modification s'est bien déroulée, false sinon * @async * @static */ - static async addAdmin(uid: string, gid: string): Promise<boolean> { - return await Tools.add(uid, gid, "members") && - await Tools.add(uid, gid, "speakers") && - await Tools.add(uid, gid, "admins"); - } + static async addAdmin(uid: string, gid: string): Promise<boolean> { return await Tools.add(uid, gid, "admins"); } /** * @memberof LDAP @@ -84,24 +79,19 @@ export class Group { * @async * @static */ - static async remAdmin(uid: string, gid: string): Promise<boolean> { - return Tools.remove(uid, gid, "admins"); - } + static async remAdmin(uid: string, gid: string): Promise<boolean> { return Tools.remove(uid, gid, "admins"); } /** * @memberof LDAP * @summary Fonction qui permet de rajouter un porte-parole à un groupe. - * @desc Cette fonction fait essentiellement appel à {@link Tools.add}. Elle rajoute également l'utilisateur au groupe. + * @desc Cette fonction fait essentiellement appel à {@link Tools.add}. Elle ne rajoute pas l'utilisateur au groupe. * @arg {string} uid - Identifiant du membre futur porte-parole * @arg {string} gid - Identifiant du groupe * @return {boolean} `true` si la modification s'est bien déroulée, false sinon * @async * @static */ - static async addSpeaker(uid: string, gid: string): Promise<boolean> { - return await Tools.add(uid, gid, "members") && - await Tools.add(uid, gid, "speakers"); - } + static async addSpeaker(uid: string, gid: string): Promise<boolean> { return await Tools.add(uid, gid, "speakers"); } /** * @memberof LDAP @@ -113,10 +103,7 @@ export class Group { * @async * @static */ - static async remSpeaker(uid: string, gid: string): Promise<boolean> { - return await Tools.remove(uid, gid, "admins") && - await Tools.remove(uid, gid, "speakers"); - } + static async remSpeaker(uid: string, gid: string): Promise<boolean> { return await Tools.remove(uid, gid, "speakers"); } /** * @memberof LDAP @@ -128,15 +115,13 @@ export class Group { * @async * @static */ - static async addMember(uid: string, gid: string) : Promise<boolean> { - return Tools.add(uid, gid, "members"); - } + static async addMember(uid: string, gid: string) : Promise<boolean> { return Tools.add(uid, gid, "members"); } /** * @memberof LDAP * @summary Fonction qui permet de supprimer un membre existant d'un groupe. * @desc Cette fonction fait essentiellement appel à {@link Tools.add}. - * Cette fonction supprime tous les droits de l'utilisateur sur le groupe, mais aussi sur les groupes sources si sont statut de membre était hérité. + * Cette fonction supprime tous les droits de l'utilisateur sur le groupe, mais aussi sur les groupes sources si son statut de membre était hérité. * @arg {string} uid - Identifiant de l'ex-membre (pas supposé valide) * @arg {string} gid - Identifiant du groupe * @return {Promise(boolean)} `true` si la modification s'est bien déroulée, false sinon @@ -144,6 +129,9 @@ export class Group { * @static */ static async remMember(uid: string, gid: string): Promise<boolean> { + return await Tools.remove(uid, gid, "members"); + + // Ce qui suit est une suppression récursive du membre dans tous les groupes fils let stack = []; let res = true; let visited = {}; diff --git a/src/ldap/internal/config.ts b/src/ldap/internal/config.ts index 16c1870b9a344a437e6355d2acf724f22a3646d6..ea5cac1f49d5a7c418168bbf59fd492f647c26dd 100644 --- a/src/ldap/internal/config.ts +++ b/src/ldap/internal/config.ts @@ -1,9 +1,6 @@ /** * Namespace qui regroupe toutes les fonctions en rapport avec le LDAP - API et fonctions internes * @namespace LDAP - */ - -/** * @file Importe la configuration du LDAP au sein de l'application, et remplace certaines valeurs en fonction des variables d'environnement. * @memberof LDAP * @author manifold, hawkspar diff --git a/src/ldap/internal/tools.ts b/src/ldap/internal/tools.ts index acb065f42d5795fa8a46437dd7edf407b22b03f2..a2b0f40a1853178fc1d4f52b9e229f66ccb84acb 100644 --- a/src/ldap/internal/tools.ts +++ b/src/ldap/internal/tools.ts @@ -108,7 +108,7 @@ export class Tools { let dirtyData = {}; Object.keys(data).forEach(function(key: string) { // Some values edit can't change - if (!['readPerm','writePerm','groups','groupsIsAdmin','members','admins'].includes(key)) { + if (!['readPerm','writePerm','groups','groupsIsAdmin','followers','members','speakers','admins'].includes(key)) { dirtyData[dirtyKeys.key]=data[key]; } }); @@ -335,9 +335,12 @@ export class Tools { * @static * @async */ - static async get(id : string, domain : "user"|"group", category : string): Promise<string[]> { //"admins"|"speakers"|"members"|"followers") { + static async get(id : string, domain : "user"|"group", category : string): Promise<string[]> { try { - if (!(category in ["admins","members"]) || domain=="group") { + return await Basics.searchSingle(domain, ldapConfig[domain][category], id); + + // Ce qui suit est une récursion qui sera déplacée dans la gestion des autorisations + if (!(category in ["admins","members"]) || domain=="user") { return await Basics.searchSingle(domain, ldapConfig[domain][category], id); } else { @@ -359,53 +362,7 @@ export class Tools { } } catch(err) { - throw "Erreur lors de la recherche des groupes d'un individu."; - } - } - - /** - * @memberof LDAP - * @summary Cette fonction teste si un utilisateur est membre d'un groupe. - * @desc Utilise les méthodes statiques {@link open.getGroups} et {@link open.getMembers} - * @param {string} uid - Identifiant de l'utilisateur à tester - * @param {string} gid - Identification du groupe à tester - * @returns {Promise(boolean)} True si l'utilisateur est membre - * @static - * @async - */ - static async isGroupMember(uid: string, gid: string) : Promise<boolean> { - try { - let lg = await Tools.get(uid, "user", "members"); - let lm = await Tools.get(gid, "group", "members"); - if (lg.includes(gid) && lm.includes(uid)) { - return true; - } - else { return false; } - } - catch(err) { - throw "Erreur lors du test d'appartenance à un groupe."; - } - } - - /** - * @memberof LDAP - * @summary Cette fonction teste si un utilisateur est admin d'un groupe. - * @desc Utilise la méthode statique {@link Open.getAdmins} - * @param {string} uid - Identifiant de l'utilisateur à tester - * @param {string} gid - Identification du groupe à tester - * @returns {Promise(boolean)} True si l'utilisateur est administrateur - * @static - * @async - */ - static async isGroupAdmin(uid: string, gid: string) : Promise<boolean> { - try { - let lm = await Tools.get(uid, "user", "admins"); - let la = await Tools.get(gid, "group", "admins"); - if (la.includes(uid) && lm.includes(uid)) { return true; } - else { return false; } - } - catch(err) { - throw "Erreur lors du test d'appartenance au bureau d'administration un groupe."; + throw "Erreur lors d'une recherche générique d'un membre d'une certaine catégorie d'un groupe."; } } } \ No newline at end of file