Projet

Général

Profil

Development #51808

retrouver dans le journal qui a supprimé un utilisateur

Ajouté par Frédéric Péters il y a environ 3 ans. Mis à jour il y a presque 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
09 mars 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Dans un ticket (#36735) je répondais qu'avec le journal des actions on pourrait voir qui a supprimé un compte mais il semble que ça ne soit pas le cas. (cf capture)


Fichiers

Révisions associées

Révision e77c98b5 (diff)
Ajouté par Benjamin Dauvergne il y a presque 3 ans

journal: permit custom prefetching (#51808)

Révision 5e29c792 (diff)
Ajouté par Benjamin Dauvergne il y a presque 3 ans

manager: search deleted users by email (#51808)

Révision a921332f (diff)
Ajouté par Benjamin Dauvergne il y a presque 3 ans

manager: show deleted users informations in journal (#51808)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

Ben c'est Frédéric P. qui a supprimé son propre comptes, la règle c'est que la colonne utilisateur est toujours celui qui a fait l'action, mais je pense qu'on pourrait changer la traduction en "suppression de son compte".

#2

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

Non j'ai supprimé là un compte autre que le mien.

#3

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

Correction:

Si c'est une suppression backoffice ça aurait du afficher suppression du compte "xyz", mais comme il est supprimé il n'est pas retrouvé :

    @classmethod
    def get_message(cls, event, context):
        (user,) = event.get_typed_references(User) <-- ici on ne retrouve pas l'utilisateur qui est supprimé
        if context and context == user:
            return _('deletion by administrator')
        elif user:
            return _('deletion of user "%s"') % user.get_full_name()
        return super().get_message(event, context) <-- et donc on tombe là je pense

Ce que j'avais prévu mais pas implémenté là c'est dans ce cas de faire un tour via DeletedUser pour récupérer ce qu'on peut sur l'utilisateur supprimé (ça vaut pour la colonne user aussi), mais il faudrait faire ça efficacement pour ne pas générer une requête par ligne de log.

#4

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

  • Statut changé de Nouveau à Solution proposée

J'ai poussé une première implémentation, ça permet de chercher les utilisateurs supprimés par mail (je ne conserve rien d'autre comme donnée personelle, à voir si on veut conserver le nom) et ça donne un rendu minimal dans le journal :

                    <tr data-event-id="2938" data-event-cursor="1577926800.0 2938" data-event-type="manager.user.deletion">
                        <td class="journal-list--timestamp-column">Jan. 2, 2020, 2 a.m.</td>
                        <td class="journal-list--user-column" data-user-id="265">agent</td>
                        <td class="journal-list--session-column">abcd</td>
                        <td class="journal-list--message-column">deletion of user &quot;deleted user (#264, user@example.com)&quot;</td>
                    </tr>
...
                    <tr data-event-id="2926" data-event-cursor="1577883600.0 2926" data-event-type="user.password.reset">
                        <td class="journal-list--timestamp-column">Jan. 1, 2020, 2 p.m.</td>
                        <td class="journal-list--user-column" data-user-id="14">deleted user (#264, user@example.com)</td>
                        <td class="journal-list--session-column">-</td>
                        <td class="journal-list--message-column">password reset</td>
                    </tr>

Le rendu "deleted user (#264, )" est discutable.

+    def __str__(self):
+        data = ['#%d' % self.old_user_id]
+        if self.old_email:
+            data.append(self.old_email)
+        return _('deleted user (%s)') % ', '.join(data)
#5

Mis à jour par Paul Marillonnet il y a environ 3 ans

Ok mais dans quel cas, à l’appel de la méthode search_by_email (nouvellement surchargée dans 0002), les événements ressortis par l’objet Q dans

+        user_ct = ContentType.objects.get_for_model(User)
+        yield Q(reference_ids__contains=[n_2_pairing(user_ct.id, pk) for pk in pks])

ne vont pas faire déjà partie de ceux que l’objet Q généré deux lignes plus haut
+        pks = list(DeletedUser.objects.filter(old_email=email).values_list('old_user_id', flat=True))
+        yield Q(user_id__in=pks)

?

#6

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

Paul Marillonnet a écrit :

Ok mais dans quel cas, à l’appel de la méthode search_by_email (nouvellement surchargée dans 0002), les événements ressortis par l’objet Q dans
[...]
ne vont pas faire déjà partie de ceux que l’objet Q généré deux lignes plus haut
[...]
?

Ça n'a pas d'importance ce n'est pas une jointure mais un WHERE, si une ligne match à la fois dans user_id et reference_ids elle ne sera retournée quand même qu'une fois.

#7

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

  • Assigné à mis à Benjamin Dauvergne
#9

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

  • Assigné à Benjamin Dauvergne supprimé

Rebasé.

#10

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

  • Assigné à mis à Benjamin Dauvergne
#11

Mis à jour par Paul Marillonnet il y a presque 3 ans

Quelque chose pas conforme pour black ou isort.

ERROR:   code-style: commands failed

#13

Mis à jour par Paul Marillonnet il y a presque 3 ans

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

Ok.

#14

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit a921332fb2e11ec290f05dd8ff11c81513a8f162
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue Mar 9 23:03:00 2021 +0100

    manager: show deleted users informations in journal (#51808)

commit 5e29c79224bf5aea89e4415b0c626bf6c6a03a4c
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue Mar 9 23:02:23 2021 +0100

    manager: search deleted users by email (#51808)

commit e77c98b57b621a18c28aef7a8fcb922df320243d
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue Mar 9 22:25:10 2021 +0100

    journal: permit custom prefetching (#51808)
#15

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

Formats disponibles : Atom PDF