Projet

Général

Profil

Development #24430

Cronjob pour supprimer les utilisateurs sans compte en ligne quand ils n'ont plus de demande en cours

Ajouté par Benjamin Dauvergne il y a presque 6 ans. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
11 juin 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Actuellement je limite volontairement la suppression des comptes en ligne car le deprovisionning va supprimer les comptes coté w.c.s. perdant possiblement des informations importantes pour le traitement des demandes (si la demande n'a pas de champ identifiant le demandeur car réservée aux utilisateurs identifiées).

L'idée ici serait sur une demande de deprovisionning venant d'a2 de simplement supprimer le NameID et de ne pas supprimer l'utilisateur.

Dans un deuxième temps un processus CRON viendrait lister tous les utilisateurs sans NameID et selon des critères à déterminer les supprimeraient si nécessaire disons par exemple. « l'utilisateur n'est lié à qu'à des formulaires en statut terminal dont la dernière action remonte à plus de 90 jours ».

Cette réflexions font suite aux demandes de Nanterre sur le ticket #24156.

On pourrait aussi parler du de-provisionning au niveau des connecteurs passerelle (cas des liaisons avec les logiciels métiers "famille") mais je vais ouvrir un autre ticket, même si ça reste lié car tant qu'un workflow aura besoin de cette liaison pour accomplir des appels il faudrait:
1. que son appairage reste conservé,
2. que w.c.s. conserve quelque part le NameID si c'est le seul moyen de faire référence à l'utilisateur lors des appels à passerelle.

Le 1 indique qu'il faudrait non pas supprimer le NameID mais indiqué sur l'utilisateur qu'ils est obsolète (et donc viser plutôt un flag, "utilisateur supprimé" posé sur l'objet User).
Le 2 milite pour que w.c.s. balance aussi son propre message de de-provisionning à destination de passerelle cette fois ci.


Fichiers

0002-user-add-a-deleted-flag-24430.patch (4,05 ko) 0002-user-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 04 octobre 2018 23:42
0003-users-add-cronjob-to-delete-users-24430.patch (5,82 ko) 0003-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 04 octobre 2018 23:42
0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (946 octets) 0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 04 octobre 2018 23:42
0001-fix-deprecation-warning-in-ElementTree.patch (1,09 ko) 0001-fix-deprecation-warning-in-ElementTree.patch Benjamin Dauvergne, 04 octobre 2018 23:42
0002-user-add-a-deleted-flag-24430.patch (4,05 ko) 0002-user-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 04 octobre 2018 23:44
0003-users-add-cronjob-to-delete-users-24430.patch (3,95 ko) 0003-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 04 octobre 2018 23:44
0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (946 octets) 0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 04 octobre 2018 23:44
0001-fix-deprecation-warning-in-ElementTree.patch (7,29 ko) 0001-fix-deprecation-warning-in-ElementTree.patch Benjamin Dauvergne, 04 octobre 2018 23:44
0001-users-add-deletion-status-to-display_name-24430.patch (1,07 ko) 0001-users-add-deletion-status-to-display_name-24430.patch Benjamin Dauvergne, 04 octobre 2018 23:50
0005-users-add-deletion-status-to-display_name-24430.patch (1,07 ko) 0005-users-add-deletion-status-to-display_name-24430.patch Benjamin Dauvergne, 05 octobre 2018 10:32
0002-user-add-a-deleted-flag-24430.patch (4,05 ko) 0002-user-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 05 octobre 2018 10:32
0003-users-add-cronjob-to-delete-users-24430.patch (4,15 ko) 0003-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 05 octobre 2018 10:32
0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (3,87 ko) 0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 05 octobre 2018 10:32
0001-fix-deprecation-warning-in-ElementTree.patch (7,29 ko) 0001-fix-deprecation-warning-in-ElementTree.patch Benjamin Dauvergne, 05 octobre 2018 10:32
0004-users-add-deletion-status-to-display_name-24430.patch (1,07 ko) 0004-users-add-deletion-status-to-display_name-24430.patch Benjamin Dauvergne, 14 octobre 2018 19:15
0002-users-add-cronjob-to-delete-users-24430.patch (4,15 ko) 0002-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 14 octobre 2018 19:15
0001-user-add-a-deleted-flag-24430.patch (4,05 ko) 0001-user-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 14 octobre 2018 19:15
0003-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (3,87 ko) 0003-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 14 octobre 2018 19:15
0005-users-add-deletion-status-to-display_name-24430.patch (1,07 ko) 0005-users-add-deletion-status-to-display_name-24430.patch Benjamin Dauvergne, 17 décembre 2018 12:53
0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (3,87 ko) 0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 17 décembre 2018 12:53
0002-users-add-cronjob-to-delete-users-24430.patch (4,15 ko) 0002-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 17 décembre 2018 12:53
0001-user-add-a-deleted-flag-24430.patch (4,05 ko) 0001-user-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 17 décembre 2018 12:53
0003-d-placement-impl-mentation-clean_deleted_users-fixup.patch (4,45 ko) 0003-d-placement-impl-mentation-clean_deleted_users-fixup.patch Benjamin Dauvergne, 17 décembre 2018 12:53
0005-users-add-deletion-status-to-display_name-24430.patch (1,07 ko) 0005-users-add-deletion-status-to-display_name-24430.patch Benjamin Dauvergne, 17 décembre 2018 13:37
0006-adaptation-test_hobo_notify-suite-d-placement-clean_.patch (1,24 ko) 0006-adaptation-test_hobo_notify-suite-d-placement-clean_.patch Benjamin Dauvergne, 17 décembre 2018 13:37
0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (3,87 ko) 0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 17 décembre 2018 13:37
0002-users-add-cronjob-to-delete-users-24430.patch (4,15 ko) 0002-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 17 décembre 2018 13:37
0001-user-add-a-deleted-flag-24430.patch (4,05 ko) 0001-user-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 17 décembre 2018 13:37
0003-d-placement-impl-mentation-clean_deleted_users-fixup.patch (4,45 ko) 0003-d-placement-impl-mentation-clean_deleted_users-fixup.patch Benjamin Dauvergne, 17 décembre 2018 13:37
0003-users-add-cronjob-to-delete-users-24430.patch (4,15 ko) 0003-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 17 décembre 2018 14:34
0005-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (3,87 ko) 0005-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 17 décembre 2018 14:34
0001-user-add-a-deleted-flag-24430.patch (4,05 ko) 0001-user-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 17 décembre 2018 14:34
0004-d-placement-impl-mentation-clean_deleted_users-fixup.patch (4,45 ko) 0004-d-placement-impl-mentation-clean_deleted_users-fixup.patch Benjamin Dauvergne, 17 décembre 2018 14:34
0007-adaptation-test_hobo_notify-suite-d-placement-clean_.patch (1,24 ko) 0007-adaptation-test_hobo_notify-suite-d-placement-clean_.patch Benjamin Dauvergne, 17 décembre 2018 14:34
0006-users-add-deletion-status-to-display_name-24430.patch (1,07 ko) 0006-users-add-deletion-status-to-display_name-24430.patch Benjamin Dauvergne, 17 décembre 2018 14:34
0002-corrige-migration-ajout-colonne-deleted-to-fixup.patch (853 octets) 0002-corrige-migration-ajout-colonne-deleted-to-fixup.patch Benjamin Dauvergne, 17 décembre 2018 14:34
0005-users-add-deletion-status-to-display_name-24430.patch (1,07 ko) 0005-users-add-deletion-status-to-display_name-24430.patch Benjamin Dauvergne, 19 décembre 2018 16:20
0003-users-add-cronjob-to-delete-users-24430.patch (6,31 ko) 0003-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 19 décembre 2018 16:20
0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (3,87 ko) 0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 19 décembre 2018 16:20
0001-user-add-a-deleted-flag-24430.patch (5,21 ko) 0001-user-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 19 décembre 2018 16:20
0002-corrige-migration-ajout-colonne-deleted-to-fixup.patch (853 octets) 0002-corrige-migration-ajout-colonne-deleted-to-fixup.patch Benjamin Dauvergne, 19 décembre 2018 16:20
0005-users-add-deletion-status-to-display_name-24430.patch (1,04 ko) 0005-users-add-deletion-status-to-display_name-24430.patch Benjamin Dauvergne, 04 janvier 2020 18:17
0003-users-add-cronjob-to-delete-users-24430.patch (5,76 ko) 0003-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 04 janvier 2020 18:17
0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (3,94 ko) 0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 04 janvier 2020 18:17
0001-user-add-a-deleted-flag-24430.patch (5,21 ko) 0001-user-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 04 janvier 2020 18:17
0002-corrige-migration-ajout-colonne-deleted-to-fixup.patch (853 octets) 0002-corrige-migration-ajout-colonne-deleted-to-fixup.patch Benjamin Dauvergne, 04 janvier 2020 18:17
0003-users-add-cronjob-to-delete-users-24430.patch (5,75 ko) 0003-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 04 janvier 2020 18:29
0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (3,9 ko) 0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 04 janvier 2020 18:29
0001-users-add-a-deleted-flag-24430.patch (5,69 ko) 0001-users-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 04 janvier 2020 18:29
0002-users-add-deletion-status-to-display_name-24430.patch (1,04 ko) 0002-users-add-deletion-status-to-display_name-24430.patch Benjamin Dauvergne, 04 janvier 2020 18:29
0003-users-add-cronjob-to-delete-users-24430.patch (5,75 ko) 0003-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 04 février 2020 16:54
0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch (3,9 ko) 0004-hobo_notify-deprovision-by-setting-the-deleted-flag-.patch Benjamin Dauvergne, 04 février 2020 16:54
0001-users-add-a-deleted-flag-24430.patch (5,55 ko) 0001-users-add-a-deleted-flag-24430.patch Benjamin Dauvergne, 04 février 2020 16:54
0002-users-add-deletion-status-to-display_name-24430.patch (1,04 ko) 0002-users-add-deletion-status-to-display_name-24430.patch Benjamin Dauvergne, 04 février 2020 16:54
0001-users-add-cronjob-to-delete-users-24430.patch (4,75 ko) 0001-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 06 octobre 2020 13:17
0001-users-add-cronjob-to-delete-users-24430.patch (4,59 ko) 0001-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 24 septembre 2021 10:15
0001-users-add-cronjob-to-delete-users-24430.patch (4,51 ko) 0001-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 28 juillet 2022 11:11
0001-users-add-cronjob-to-delete-users-24430.patch (6,28 ko) 0001-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 01 août 2022 15:05
0001-users-add-cronjob-to-delete-users-24430.patch (6,95 ko) 0001-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 31 août 2022 12:18
0001-users-add-cronjob-to-delete-users-24430.patch (6,42 ko) 0001-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 31 août 2022 12:53
0001-users-add-cronjob-to-delete-users-24430.patch (6,63 ko) 0001-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 14 octobre 2022 15:59
0001-users-add-cronjob-to-delete-users-24430.patch (6,67 ko) 0001-users-add-cronjob-to-delete-users-24430.patch Benjamin Dauvergne, 14 octobre 2022 18:47

Demandes liées

Lié à Publik - Development #26907: Cycle de vie des comptesFermé24 novembre 2020

Actions
Lié à w.c.s. - Development #41922: ne pas supprimer les comptes lors du déprovisionningFermé21 avril 2020

Actions
Lié à w.c.s. - Development #42393: Flag marquant les utilisateurs supprimésFermé02 mai 2020

Actions
Lié à Authentic 2 - Development #67901: web-service 'keepalive' pour décaler l'expiration d'un compteFermé03 août 2022

Actions
Lié à w.c.s. - Development #71036: communiquer régulièrement à authentic les utilisateurs "actifs"Fermé06 novembre 2022

Actions
Lié à w.c.s. - Bug #71859: clean_deleted_users() got an unexpected keyword argument 'job'Fermé30 novembre 2022

Actions
Lié à w.c.s. - Bug #71896: clean-deleted-users : erreur sur user_id = _submitterFermé01 décembre 2022

Actions

Révisions associées

Révision c52b1b8e (diff)
Ajouté par Benjamin Dauvergne il y a plus d'un an

users: add cronjob to delete users (#24430)

Historique

#1

Mis à jour par Brice Mallet il y a presque 6 ans

  • Tracker changé de Bug à Development

Cette réflexions font suite aux demandes de Nanterre sur le ticket #24156.

Et plus globalement je dirais au respect du RGPD, il faut pour voir réellement supprimer les comptes (demande de la DPO de Fontenay, dès à présent)

disons par exemple. « l'utilisateur n'est lié à qu'à des formulaires en statut terminal dont la dernière action remonte à plus de 90 jours ».

Encore plus simple : « l'utilisateur n'est lié à aucun formulaire », ce qui devrait être le cas avec des "vieux" comptes et des actions d'anonymisation correctement paramétré et si n'est pas le cas, cela nous donne un argument de plus pour encourager à paramétrer correctement des délais d'anonymisation au plus court.

#2

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

#3

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Assigné à mis à Benjamin Dauvergne
#5

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Le coup est parti trop vite.

Donc premier patch gratuit.

Deuxième patch ajout d'une nouvelle colonne booléenne "deleted".

Troisième patch cronjob de nettoyage des utilisateurs à supprimer.

Quatrième patch changement dans hobo_notify pour poser ce flag plutôt que de supprimer les utilisateurs.

À voir si j'en rajoute une couche pour afficher un petit disclaimer "(supprimé)" un peu partout dans les IHMs, via je ne sais quel point de coupure.

#9

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Ce patch ne traite pas le cas des agents apparaissant dans l'historique (cas pas traité actuellement non plus, donc il n'y a pas de régression).

#10

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Patch s'appliquant toujours sur master.

#11

Mis à jour par Frédéric Péters il y a plus de 5 ans

Discussion par ailleurs sur le fait de créer des utilisateurs dans w.c.s. et pas dans authentic…

#12

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Frédéric Péters a écrit :

Discussion par ailleurs sur le fait de créer des utilisateurs dans w.c.s. et pas dans authentic…

Ce ticket est intéressant sans cette discussion; en gros je ne vois pas le fait de finir cette discussion comme étant bloquant pour intégrer ce patch.

Ce que fait ce patch c'est de combiner nos obligations légales qu'on ignore pour l'instant avec les besoins fonctionnels de w.c.s., i.e. le fait que les formdata qui perdent l'utilisateur associés produisent une perte de fonctionnalité importante, au niveau du traitement du formdef lui même mais aussi au niveau du traitement global de différentes demandes de l'usager (sans parler des workflows qui nécessitent la présence des variables form_user_name_identifiers_0 pour ne serait-ce que fonctionner).

#13

Mis à jour par Frédéric Péters il y a plus de 5 ans

Ce ticket est intéressant sans cette discussion; en gros je ne vois pas le fait de finir cette discussion comme étant bloquant pour intégrer ce patch.

C'est parce que je me mets à imaginer des critères supplémentaires à prendre en compte, pour éviter des suppressions malheureuses. (genre quelqu'un au guichet, on commence la saisie backoffice de sa demande, on la garde en brouillon pour la reprendre le lendemain parce qu'il y a quelques documents à scanner à inclure dedans, paf le lendemain le compte n'est plus là).

#14

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Je laisse 90 jours, c'est dit dans la description, ça devrait aller.

#15

Mis à jour par Frédéric Péters il y a plus de 5 ans

Je laisse 90 jours, c'est dit dans la description, ça devrait aller.

« l'utilisateur n'est lié à qu'à des formulaires en statut terminal dont la dernière action remonte à plus de 90 jours ».

Mais dans 0002-users-add-cronjob-to-delete-users je ne vois pas apparaitre cette notion de "dernière action remonte à plus de 90 jours". Et de là je comprends "« utilisateur n'est (lié qu'à des formulaires en statut terminal) ET (dont la dernière action remonte à plus de 90 jours) ». Et si w.c.s. s'occupe du premier terme (formulaires en statut terminal), ce serait "autre chose" qui assurerait que le message de déprovisionning n'arriverait pas avant 90 jours.

Et aussi, 0002 ne fait pas "formulaires en statut terminal" mais "pas de formulaire du tout", cf la redéfinition du critère en premier commentaire, « l'utilisateur n'est lié à aucun formulaire ».

~~

Bref, tout un historique à s/me remettre en tête.

#16

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Frédéric Péters a écrit :

Je laisse 90 jours, c'est dit dans la description, ça devrait aller.

Oui c'est vrai finalement j'ai choisi de partir sur pas de formulaire du tout, je l'avais oublié, ce qui est mieux parce que :
1. ça ne met pas de durée particulière en dur qu'il faudrait venir configuré, ces questions restent au niveau du paramétrage des workflows,
2. ça évite de se poser la question de ce qui est terminal ou pas,
3. ça oblige à traiter le problème du nettoyage des brouillons (en vrai je n'y pensais pas du tout mais ta remarque me permet d'y penser) si ce n'est pas déjà le cas.

#17

Mis à jour par Frédéric Péters il y a plus de 5 ans

Je vais faire tourner ça en local un peu.

Sur la forme, je ne trouve pas "users: add cronjob to delete users (#24430)" terrible, c'est dommage d'avoir ainsi du code devant faire la distinction sql/pickle. Peut-être plutôt, taper une méthode neutre, genre dans la classe Publisher, enregistrée via register_cronjobs, qui, elle, pourra faire appel à publisher.user_class et appeler du code situé dans la bonne classe (code qui pourrait juste être un get_active_ids, il me semble).

#18

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

J'ai intégré tes remarques, par contre plutôt qu'un get_active_ids() je génère directement la liste des ids à détruire, l'idée étant que le comportement à faire pour la destruction reste dans publisher seul la logique pour déterminer les comptes inactifs reste dans users.py et sql.py.

#20

Mis à jour par Frédéric Péters il y a plus de 5 ans

postgresql 10.5 et :

File "/home/fred/src/eo/wcs/wcs/sql.py", line 339, in f
    return func(*args, **kwargs)
File "/home/fred/src/eo/wcs/wcs/sql.py", line 592, in do_user_table
    cur.execute('ALTER TABLE %s ADD COLUMN deleted DEFAULT(FALSE)' % table_name)
psycopg2.ProgrammingError: syntax error at or near "DEFAULT" 
LINE 1: ALTER TABLE users ADD COLUMN deleted DEFAULT(FALSE)
                                             ^
#22

Mis à jour par Frédéric Péters il y a plus de 5 ans

Migration corrigée. Est-ce qu'il y aurait un test pour tester les migrations ?

cf tests/test_sql.py, il y a des test_migration_XX_blah qui donnent une idée.

#23

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Solution proposée à Nouveau

Ok je vais regarder ça.

#30

Mis à jour par Frédéric Péters il y a plus de 5 ans

Tant que la démarche n'a pas été anonymisée le compte restera.

Oui dans w.c.s. mais pas dans a2 et donc plus de lien avec jsondatastore si c'est basé sur le NameID; je ne vois vraiment pas de solution à part de mettre l'expiration des comptes à 2 ans pour tout le monde, puis 3 ans quand on trouvera un truc à faire tous les 2 ans...

Mais côté a2 il y aura eu email à l'usager, une fois, deux fois (?), pour lui dire de venir cliquer s'il ne voulait pas que le compte soit supprimé. Non ?

#31

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Frédéric Péters a écrit :

Mais côté a2 il y aura eu email à l'usager, une fois, deux fois (?), pour lui dire de venir cliquer s'il ne voulait pas que le compte soit supprimé. Non ?

Oui tout à fait, si c'est jugé suffisant on est bon, sauf que si les gens oublie et bien adieu les données.

#32

Mis à jour par Stéphane Laget il y a plus de 5 ans

Peut-on envisager de gérer cela avec des attributs sur des rôles ?
Sinon, pour ce type de cas très particulier, on peut aussi envisager ne pas fermer une demande (qui reste donc "active") pendant longtemps.

#33

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Stéphane Laget a écrit :

Peut-on envisager de gérer cela avec des attributs sur des rôles ?

On a pas d'attribut sur les rôles, on aura un attribut sur l'OU mais c'est la même pour tous les usagers. On authentifie des usagers pas des associations; l'usager n'aura qu'à retrouver son association dans l'annuaire des associations (s'il n'a pas cliquer dans les mails de relance) et retrouvera ses données (qui sont publiques de toute façon); c'est pour cela que j'indiquais je ne sais plus quand qu'il fallait séparer dans le jsondatastore, les associations (en utilisant leur RNA comme clé dans le jsondatastore) et la liste des associations d'un utilisateur (qui utilise le NameID comme clé).

Sinon, pour ce type de cas très particulier, on peut aussi envisager ne pas fermer une demande (qui reste donc "active") pendant longtemps.

Oui, ça n'aura aucun effet, on parle des utilisateurs là pas des demandes. On doit supprimer les utilisateurs en ligne même si les demandes ne sont pas fermées.

À Grenoble on pourra peut-être mettre 2 ans d'expiration mais à Lyon ce sera 6 mois au niveau de GLC, rien de plus, donc aucune donnée liée à l'utilisateur ne pourra survivre plus longtemps (sauf à la stocker par rapport à un autre identifiant plus pérenne: identifiant métier, email, etc..).

#34

Mis à jour par Stéphane Laget il y a plus de 5 ans

Benjamin Dauvergne a écrit :

Sinon, pour ce type de cas très particulier, on peut aussi envisager ne pas fermer une demande (qui reste donc "active") pendant longtemps.

Oui, ça n'aura aucun effet, on parle des utilisateurs là pas des demandes. On doit supprimer les utilisateurs en ligne même si les demandes ne sont pas fermées.

Je ne comprends pas.
Le sujet du ticket c'est "Supprimer les utilisateurs quand ils n'ont plus de liens avec un compte et plus de formulaires dans un statut non terminal"
Si un utilisateur a toujours des demandes en cours (non terminées, non anonymisées), on ne doit pas supprimer le compte !
Peut-être à Lyon si ça les amuse, mais ce fonctionnement ne peut pas être généralisé sur toutes les instances, cela n'a pas de sens.

À Grenoble on pourra peut-être mettre 2 ans d'expiration mais à Lyon ce sera 6 mois au niveau de GLC, rien de plus, donc aucune donnée liée à l'utilisateur ne pourra survivre plus longtemps (sauf à la stocker par rapport à un autre identifiant plus pérenne: identifiant métier, email, etc..).

Effectivement ce délai d'expiration doit clairement être un paramètre pour chaque instance.

#35

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Sujet changé de Supprimer les utilisateurs quand ils n'ont plus de liens avec un compte et plus de formulaires dans un statut non terminal à Supprimer les utilisateurs quand ils ne sont plus liés à aucune demande

Le sujet du ticket c'est "Supprimer les utilisateurs quand ils n'ont plus de liens avec un compte et plus de formulaires dans un statut non terminal"

Oui mais dans le premier commentaire c'est changé ainsi :

Encore plus simple : « l'utilisateur n'est lié à aucun formulaire », ce qui devrait être le cas avec des "vieux" comptes et des actions d'anonymisation correctement paramétré et si n'est pas le cas, cela nous donne un argument de plus pour encourager à paramétrer correctement des délais d'anonymisation au plus court.

Je viens de modifier le sujet.

#36

Mis à jour par Pierre Cros il y a plus de 5 ans

Donc si mon compte est lié à une demande non anonymisée, il ne risque pas d'être effacé (même si j'ai raté les demandes de confirmation - idéalement je ne devrais même pas en recevoir, mon compte étant lié à une demande) ?
C'est la seule chose qui intéresse Stef je pense (en tout cas ça marche pour les cas d'usage asso, pour lesquels l'anonymisation n'est pas nécessaire).

Pour les demandes de citoyens, on pousse effectivement pour que l'anonymisation soit faite comme il faut, ça permet la suppression des comptes inutilisés. Le fait de conserver des comptes citoyens inusités en dehors du contexte asso me semble acceptable, en tout cas tant qu'on a pas de vraie gestion des comptes personnes morales.

#37

Mis à jour par Frédéric Péters il y a plus de 5 ans

Donc si mon compte est lié à une demande non anonymisée, il ne risque pas d'être effacé (même si j'ai raté les demandes de confirmation - idéalement je ne devrais même pas en recevoir, mon compte étant lié à une demande) ?

Ce ticket concerne w.c.s.; l'utilisateur dans w.c.s. ne sera pas supprimé; mais côté authentic, il pourra l'être, ce qu'écrit Benjamin :

On doit supprimer les utilisateurs en ligne même si les demandes ne sont pas fermées.

S'il y a des mécaniques à définir pour empêcher ça, elles doivent être discutées, mais idéalement pas dans ce ticket w.c.s. Je vais faire un message sur la liste pour reprendre tout ça.

#38

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Stéphane Laget a écrit :

Benjamin Dauvergne a écrit :

Sinon, pour ce type de cas très particulier, on peut aussi envisager ne pas fermer une demande (qui reste donc "active") pendant longtemps.

Oui, ça n'aura aucun effet, on parle des utilisateurs là pas des demandes. On doit supprimer les utilisateurs en ligne même si les demandes ne sont pas fermées.

Je ne comprends pas.
Le sujet du ticket c'est "Supprimer les utilisateurs quand ils n'ont plus de liens avec un compte et plus de formulaires dans un statut non terminal"
Si un utilisateur a toujours des demandes en cours (non terminées, non anonymisées), on ne doit pas supprimer le compte !
Peut-être à Lyon si ça les amuse, mais ce fonctionnement ne peut pas être généralisé sur toutes les instances, cela n'a pas de sens.

C'est sans fin en terme de dev, si l'IdP doit interroger toutes les applications de la plate-forme pour savoir si oui ou non elle considère que ce compte est inactif et depuis quand, il faut mettre une barrière quelque part. Dire on conserve les comptes 2 ans sans inactivité me paraissait bien suffisant; si au bout de 2 ans sans inactivité il y a des demandes ouvertes, et bien elles pourront toujours être traitée mais la personne ne pourra plus venir les voir en ligne (et encore, il y a le code de suivi).

#39

Mis à jour par Frédéric Péters il y a plus de 5 ans

(discussion sur la liste)

#40

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Avant de merger vérifier numéro de migration avec #22651.

#42

Mis à jour par Benjamin Dauvergne il y a plus de 4 ans

Rebasé encore une fois et j'ai ajouté une méthode pour poser le flag "deleted" qui en profite pour nettoyer user.form_data, on ne conserve que user.name et user.email (en vrai on pourrait même anoymiser ça). L'important est de conserver l'objet et surtout le name_id tant qu'un formulaire existe.

#44

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Lié à Development #41922: ne pas supprimer les comptes lors du déprovisionning ajouté
#45

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

  • Statut changé de Solution proposée à En cours
#46

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

  • Statut changé de En cours à Solution proposée

Branche rebasée au dessus de #42393 (elle même rebasée sur master localement).

#47

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

#48

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

  • Sujet changé de Supprimer les utilisateurs quand ils ne sont plus liés à aucune demande à Cronjob pour supprimer les utilisateurs sans compte en ligne quand ils n'ont plus de demande en cours
  • Statut changé de Solution proposée à En cours
#49

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

  • Statut changé de En cours à Solution proposée
#50

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

Après rebasage sur master il ne reste que le cron de suppression, mis au goût du jour avec un paramètre name.

#52

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

Rebasé.

#53

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Rebasé, méthode SqlUser.get_to_deleted_is réécrite entièrement en SQL.

#54

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Statut changé de Solution proposée à En cours

Il manque la prise en compte des fiches.

#55

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Je suis repassé à une itération sur tous les FormDef pour y intégrer aussi les CardDef et au passage je prends aussi en compte la colonne `who` des tables _evolutions, ça couvrira ainsi aussi les agents.

#56

Mis à jour par Frédéric Péters il y a plus d'un an

C'est peut-être parce que ce ticket est trop long mais là c'est compliqué d'être sûr de ce qu'on veut, du coup je trouve que le code gagnerait en commentaires, et peut-être aussi à revoir le nommage, si je comprends bien get_to_delete_ids c'est en fait get_unreferenced_ids ?

Il y aurait alors à faire attention il y a désormais des assignations de fonctions à des personnes, ça se trouve dans workflow_roles, ex: {'_receiver': '_user:123'}.

+            deleted_ids = deleted_ids & {user_id for user_id, in cur.fetchall()}

Détail perso mais je suis une vieille personne et cette ligne m'oblige encore à aller chercher dans la doc vérifier la signification de l'opérateur &, je préfère la forme explicite, deleted_ids.intersection(...).

La partie wcs/users.py peut être zappée on est nécessairement en SQL désormais.

#57

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Frédéric Péters a écrit :

C'est peut-être parce que ce ticket est trop long mais là c'est compliqué d'être sûr de ce qu'on veut, du coup je trouve que le code gagnerait en commentaires, et peut-être aussi à revoir le nommage, si je comprends bien get_to_delete_ids c'est en fait get_unreferenced_ids ?

À découper en plusieurs fonctions/ensembles ce serait plutôt get_to_delete_ids = get_marked_as_deleted_ids & get_unreferenced_ids. Je trouve que le get_to_delete_ids manifeste bien l'objectif de la fonction, je peux bien sûr la découper plus ou la renommer si ça te parait toujours obscure.

Il y aurait alors à faire attention il y a désormais des assignations de fonctions à des personnes, ça se trouve dans workflow_roles, ex: {'_receiver': '_user:123'}.

[...]

Ok pris en compte.

Détail perso mais je suis une vieille personne et cette ligne m'oblige encore à aller chercher dans la doc vérifier la signification de l'opérateur &, je préfère la forme explicite, deleted_ids.intersection(...).

Ok.

La partie wcs/users.py peut être zappée on est nécessairement en SQL désormais.

Ok retiré.

Branche à jour avec tout ça.

#58

Mis à jour par Frédéric Péters il y a plus d'un an

si ça te parait toujours obscur

Oui ça m'est toujours obscur; j'essaie de mettre le doigt sur le truc, c'est peut-être qu'il y a deleted_ids qui commence en étant tous les utilisateurs supprimés puis qui se réduit petit à petit mais ne contient donc plus "tous les utilisateurs supprimés". Peut-être que ça serait plus clair pour moi d'avoir d'avoir des phases explicites :

  • 1/ la liste des utilisateurs supprimés
  • 2/ l'accumulation d'une liste indépendante, avec les utilisateurs référencés
  • 3/ l'intersection pour représenter les utilisateurs à retirer de la table

Truc pas clair lié c'est "# keep only user.id not present in form/card_data.user_id", c'est cette accumulation de delete / keep / not present qui fait pour moi un truc bizarre.

#59

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Est-ce que la forme suivante plus itérative te parait plus simple (c'est exactement la même chose mais c'est postgres qui fait les intersections) ? On est obligé d'utiliser des intersections d'une manière ou d'une autre, si je sépare l'accumulation des ids non référencé il faut quand même que je parte d'une valeur initiale, au pire la totalité des ids.

#60

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Statut changé de Solution proposée à En cours
#61

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Voilà, je pense que ça correspond à ta demande.

#63

Mis à jour par Frédéric Péters il y a plus d'un an

# once a day delete users without any formdata

s/users without any formdata/unreferenced users/

            # referenced in form/card data.workflow_roles_array
            sql_statement = '''SELECT CAST(SUBSTRING(workflow_role.workflow_role FROM 7) AS INTEGER)
                                 FROM %(table)s AS data, UNNEST(data.workflow_roles_array) AS workflow_role
                                 WHERE SUBSTRING(workflow_role.workflow_role FROM 1 FOR 6) = '_user:' ''' % {

il pourrait y avoir un commentaire expliquant la requête, si je la comprends bien quelque chose comme "users will be referenced as "_user:<user id>" entries in workflow_roles_array, filter on values starting with "_user:" (FROM 1 FOR 6) and extract the id part (FROM 7).

#65

Mis à jour par Frédéric Péters il y a plus d'un an

Pardon j'ai raté un dernier truc,

        # once a day delete unreferenced users
        cls.register_cronjob(CronJob(cls.clean_deleted_users, name='clean_deleted_users', minutes=[0]))

c'est toutes les heures, là.

#67

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Solution proposée à Solution validée
#68

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Merci. Je ne pousserai que lorsque le boulot sur keepalive sera terminé et poussé pour ne pas avoir de suppression de compte pour des comptes ayant des demandes (pour le client qui demande ce fonctionnement).

#70

Mis à jour par Marie Kuntz il y a plus d'un an

  • Lié à Development #67901: web-service 'keepalive' pour décaler l'expiration d'un compte ajouté
#71

Mis à jour par Frédéric Péters il y a plus d'un an

  • Lié à Development #71036: communiquer régulièrement à authentic les utilisateurs "actifs" ajouté
#72

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Rebasé, je pousse quand c'est vert.

#73

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Statut changé de Solution validée à Résolu (à déployer)
commit c52b1b8ef5f7d90dc4207e83fd91ab768707a1bc
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Oct 4 23:33:09 2018 +0200

    users: add cronjob to delete users (#24430)
#74

Mis à jour par Transition automatique il y a plus d'un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#75

Mis à jour par Frédéric Péters il y a plus d'un an

  • Lié à Bug #71859: clean_deleted_users() got an unexpected keyword argument 'job' ajouté
#76

Mis à jour par Frédéric Péters il y a plus d'un an

  • Lié à Bug #71896: clean-deleted-users : erreur sur user_id = _submitter ajouté
#77

Mis à jour par Transition automatique il y a environ un an

Automatic expiration

Formats disponibles : Atom PDF