Development #52924
Désactivation en masse des utilisateurs d'une source LDAP n'existant plus
0%
Description
Aujourd'hui, si on retravaille les sources d'utilisateurs LDAP et qu'on renomme par exemple une source, les utilisateurs sont tous resynchronisés dans l'annuaire (comme de nouveaux utilisateurs), mais les utilisateurs associés à l'ancien nom de la source ne sont pas désactivés.
On pourrait assez facilement imaginer que le script deactivate-orphaned-ldap-users s'occupe de cela, mais je ne sais pas comment lister toutes les sources d'utilisateurs actives pour en déduire celles ayant disparues. Peut-être existe-t-il d'ailleurs d'autres sources externes que les sources LDAP ?
Aujourd'hui, j'utilise la requête SQL suivante pour gérer ce cas :
UPDATE custom_user_user SET is_active='f' AND deactivation=now() WHERE is_active='t' AND id IN (SELECT id FROM authentic2_userexternalid WHERE source NOT IN ('source_active_1', 'source_active_2', [...]));
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a presque 3 ans
Il faut accumuler les sources realms = [block['realm'] for block in blocks]
exclure les UserExternalId pour ces sources uei_qs = UserExternalId.objects.exlucde(source__in=realms)
ensuite filtrer les utilisateurs User.objects.filter(userexternalid__in=uei_qs)
.
Mis à jour par Benjamin Renard il y a presque 3 ans
- Fichier 0001-deactivate-orphaned-ldap-users-handle-users-of-old-s.patch 0001-deactivate-orphaned-ldap-users-handle-users-of-old-s.patch ajouté
Benjamin Dauvergne a écrit :
Il faut accumuler les sources
realms = [block['realm'] for block in blocks]
exclure les UserExternalId pour ces sourcesuei_qs = UserExternalId.objects.exlucde(source__in=realms)
ensuite filtrer les utilisateursUser.objects.filter(userexternalid__in=uei_qs)
.
Voilà un patch qui fait le boulot. Si je te suis bien, la seule source d'utilisateurs externes, c'est l'annuaire LDAP donc ?
Mis à jour par Benjamin Dauvergne il y a presque 3 ans
Benjamin Renard a écrit :
Benjamin Dauvergne a écrit :
Il faut accumuler les sources
realms = [block['realm'] for block in blocks]
exclure les UserExternalId pour ces sourcesuei_qs = UserExternalId.objects.exlucde(source__in=realms)
ensuite filtrer les utilisateursUser.objects.filter(userexternalid__in=uei_qs)
.Voilà un patch qui fait le boulot. Si je te suis bien, la seule source d'utilisateurs externes, c'est l'annuaire LDAP donc ?
Actuellement oui.
Mis à jour par Benjamin Renard il y a presque 3 ans
Benjamin Renard a écrit :
Benjamin Dauvergne a écrit :
Il faut accumuler les sources
realms = [block['realm'] for block in blocks]
exclure les UserExternalId pour ces sourcesuei_qs = UserExternalId.objects.exlucde(source__in=realms)
ensuite filtrer les utilisateursUser.objects.filter(userexternalid__in=uei_qs)
.Voilà un patch qui fait le boulot. Si je te suis bien, la seule source d'utilisateurs externes, c'est l'annuaire LDAP donc ?
Est-ce que ce patch peut faire l'affaire ? Pour info, je viens de le tester sur une instance client et il a fait le job attendu.
Mis à jour par Serghei Mihai il y a presque 3 ans
- Statut changé de Nouveau à Solution validée
- Assigné à mis à Benjamin Renard
Mis à jour par Serghei Mihai il y a presque 3 ans
- Statut changé de Solution validée à En cours
J'ai rajouté le test. Branche poussée, en cours de build.
Mis à jour par Benjamin Dauvergne il y a presque 3 ans
- Statut changé de En cours à Solution validée
Mis à jour par Serghei Mihai il y a presque 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 318c709f2445aa5d62f4fea397b7477ee237c534 (origin/main) Author: Benjamin Renard <brenard@easter-eggs.com> Date: Fri Apr 9 18:53:43 2021 +0200 ldap: deactivate orphaned users of old sources (#52924)
Mis à jour par Frédéric Péters il y a presque 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
ldap: deactivate orphaned users of old sources (#52924)