Actions
Anomalie #33075
ouvertLDAP - Script de synchro - un utilisateur suspendu est de nouveau suspendu lors du passage du script
Début:
20/03/2025
Echéance:
Description
**Bonjour,**
Nous avons constaté un comportement particulier lors de l'exécution du script de synchronisation LDAP.
Après l'ajout ou la modification des utilisateurs provenant de l'Active Directory (AD),
Maarch effectue une vérification pour identifier les utilisateurs présents dans Maarch mais absents du LDAP.
Si un utilisateur est détecté dans Maarch mais non présent dans le LDAP, deux vérifications sont effectuées :
1. L'utilisateur est-il supprimé ? (statut DEL)
2. L'utilisateur est-il un utilisateur de webservices ?
Si l'utilisateur n'est ni supprimé ni un utilisateur REST, alors il est suspendu.
**Problème rencontré :**
Le statut d'un utilisateur suspendu est "SPD". Lors de la prochaine exécution du script de synchronisation,
l'utilisateur passe à nouveau dans ces vérifications et est suspendu une nouvelle fois.
Chaque suspension génère une entrée dans l'historique. Pour certains clients disposant d'annuaires LDAP volumineux,
l'historique est saturé par ces suspensions (pouvant atteindre plusieurs dizaines de milliers, voire plus d’un million d’entrées).
Cela rend la consultation de l'historique longue et fastidieuse.
**Questions :**
- Est-il possible d'empêcher l'enregistrement de ces suspensions en base de données ?
- Ou bien, peut-on ajouter une vérification sur l'état de l'utilisateur avant de procéder à sa suspension ?
- Est-il possible de mettre à disposition un script ou une procédure de suppression de masse d'utilisateurs ?
**Cordialement**
Actuellement dans le script, ne vérifie pas si l'utilisateur est suspendu.
Il vérifie seulement si :
- L'utilisateur n'existe pas dans LDAP (
empty($ldapUsersLogin[$user['user_id']])
) - L'utilisateur n'est pas supprimé (
$user['status'] != 'DEL'
) - L'utilisateur n'est pas en mode REST (
$user['mode'] != 'rest'
)
foreach ($maarchUsers as $user) {
if (empty($ldapUsersLogin[$user['user_id']]) && $user['status'] != 'DEL' && $user['mode'] != 'rest') {
$curlResponse = CurlModel::exec([
'url' => rtrim($GLOBALS['maarchUrl'], '/') . '/rest/users/' . $user['id'] . '/suspend',
'basicAuth' => ['user' => $GLOBALS['user'], 'password' => $GLOBALS['password']],
'headers' => ['content-type:application/json'],
'method' => 'PUT'
]);
if ($curlResponse['code'] != 204) {
writeLog(
['message' => "[ERROR] Suspend user [{$maarchUsersLogin[$user['user_id']]['user_id']}] failed : {$curlResponse['response']['errors']}"]
);
}
}
}
Solution proposée :
Il faut ajouter une condition pour vérifier que l'utilisateur n'est pas déjà suspendu (statut 'SPD') avant de le suspendre à nouveau.
La condition actuelle :
if (empty($ldapUsersLogin[$user['user_id']]) && $user['status'] != 'DEL' && $user['mode'] != 'rest')
Doit devenir :
if (empty($ldapUsersLogin[$user['user_id']]) && $user['status'] != 'DEL' && $user['status'] != 'SPD' && $user['mode'] != 'rest')
Cette modification permettra de :
- Éviter les suspensions multiples d'un même utilisateur
- Réduire considérablement le nombre d'entrées dans l'historique et améliorer les performances de consultation de l'historique
Actions
#2
Mis à jour par Cynthia APURA il y a 14 jours
- Projet changé de 717 à Backlog Courrier
- Sujet changé de Suspension des utilisateurs LDAP à LDAP - Script de synchro - un utilisateur suspendu est de nouveau suspendu lors du passage du script
- Description mis à jour (diff)
- Pôle Maarch
Support N1supprimé
Actions
#3
Mis à jour par Cynthia APURA il y a 14 jours
- Description mis à jour (diff)
- Statut changé de A qualifier à R&D - A étudier
Actions