From 245994590f7e464853e424d60742a9d5deb8dca1 Mon Sep 17 00:00:00 2001 From: LucianoPierdona Date: Fri, 9 Sep 2022 16:47:57 -0300 Subject: [PATCH 1/5] send only ids when sync roles --- apps/meteor/ee/server/lib/ldap/Manager.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/meteor/ee/server/lib/ldap/Manager.ts b/apps/meteor/ee/server/lib/ldap/Manager.ts index 1be6c3bb78ddd..d9405bf4d8feb 100644 --- a/apps/meteor/ee/server/lib/ldap/Manager.ts +++ b/apps/meteor/ee/server/lib/ldap/Manager.ts @@ -224,11 +224,18 @@ export class LDAPEEManager extends LDAPManager { const userFields = ensureArray(fieldMap[ldapField]); for await (const userField of userFields) { - const [roleId] = userField.split(/\.(.+)/); - allowedRoles.push(roleId); + const [roleName] = userField.split(/\.(.+)/); + + const role = roles.find((role) => role.name === roleName); + + if (role) { + allowedRoles.push(role._id); + } if (await this.isUserInGroup(ldap, syncUserRolesBaseDN, syncUserRolesFilter, { dn, username }, ldapField)) { - roleList.push(roleId); + if (role) { + roleList.push(role._id); + } continue; } } From 9aad0a2d0a10daca92539bd42a262f94ab8489c5 Mon Sep 17 00:00:00 2001 From: LucianoPierdona Date: Wed, 16 Nov 2022 13:23:55 -0300 Subject: [PATCH 2/5] update projection --- apps/meteor/ee/server/lib/ldap/Manager.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/meteor/ee/server/lib/ldap/Manager.ts b/apps/meteor/ee/server/lib/ldap/Manager.ts index e0fc28edca98c..a79b8ba913957 100644 --- a/apps/meteor/ee/server/lib/ldap/Manager.ts +++ b/apps/meteor/ee/server/lib/ldap/Manager.ts @@ -196,7 +196,8 @@ export class LDAPEEManager extends LDAPManager { {}, { projection: { - _updatedAt: 0, + _id: 1, + name: 1, }, }, ).toArray()) as Array; From ca8f375848cc718846eab0cf74131fbdb7dcc7fb Mon Sep 17 00:00:00 2001 From: LucianoPierdona Date: Fri, 18 Nov 2022 10:39:26 -0300 Subject: [PATCH 3/5] fix query for sync roles --- apps/meteor/server/models/raw/Roles.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meteor/server/models/raw/Roles.ts b/apps/meteor/server/models/raw/Roles.ts index ecbdc7a9efd03..59a316c9e42a8 100644 --- a/apps/meteor/server/models/raw/Roles.ts +++ b/apps/meteor/server/models/raw/Roles.ts @@ -131,7 +131,7 @@ export class RolesRaw extends BaseRaw implements IRolesModel { findInIds

(ids: IRole['_id'][], options?: FindOptions): P extends Pick ? FindCursor

: FindCursor { const query: Filter = { - name: { + _id: { $in: ids, }, }; From 77b15f1e367008d341cf09768a2942d9ed4e8cc0 Mon Sep 17 00:00:00 2001 From: LucianoPierdona Date: Fri, 18 Nov 2022 19:00:50 -0300 Subject: [PATCH 4/5] add check for ids --- apps/meteor/ee/server/lib/ldap/Manager.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/meteor/ee/server/lib/ldap/Manager.ts b/apps/meteor/ee/server/lib/ldap/Manager.ts index a79b8ba913957..43fcfcafcca4d 100644 --- a/apps/meteor/ee/server/lib/ldap/Manager.ts +++ b/apps/meteor/ee/server/lib/ldap/Manager.ts @@ -224,9 +224,9 @@ export class LDAPEEManager extends LDAPManager { const userFields = ensureArray(fieldMap[ldapField]); for await (const userField of userFields) { - const [roleName] = userField.split(/\.(.+)/); + const [roleIdOrName] = userField.split(/\.(.+)/); - const role = roles.find((role) => role.name === roleName); + const role = roles.find((role) => role._id === roleIdOrName || role.name === roleIdOrName); if (role) { allowedRoles.push(role._id); From 1a73c8db69da76324a69d328bc31a3c5d2744886 Mon Sep 17 00:00:00 2001 From: LucianoPierdona Date: Fri, 18 Nov 2022 19:32:22 -0300 Subject: [PATCH 5/5] updated check to search by id first --- apps/meteor/ee/server/lib/ldap/Manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meteor/ee/server/lib/ldap/Manager.ts b/apps/meteor/ee/server/lib/ldap/Manager.ts index 43fcfcafcca4d..716ce921baf27 100644 --- a/apps/meteor/ee/server/lib/ldap/Manager.ts +++ b/apps/meteor/ee/server/lib/ldap/Manager.ts @@ -226,7 +226,7 @@ export class LDAPEEManager extends LDAPManager { for await (const userField of userFields) { const [roleIdOrName] = userField.split(/\.(.+)/); - const role = roles.find((role) => role._id === roleIdOrName || role.name === roleIdOrName); + const role = roles.find((role) => role._id === roleIdOrName) ?? roles.find((role) => role.name === roleIdOrName); if (role) { allowedRoles.push(role._id);