Les modifications de la période de grâce contournent la vérification des médias `skip_review_media_groups`

Résumé

La vérification « review media » (paramètre de site skip_review_media_groups) n’est appliquée qu’au moment de la création du message, dans NewPostManager. Les modifications passent par PostRevisor, qui n’exécute jamais la vérification des médias. Un utilisateur peut donc publier du texte brut en premier (passant la revue), puis ajouter des images via une modification — et le message n’entre jamais dans la file d’attente de modération.

Pire encore, si la modification intervient dans la editing_grace_period (5 minutes par défaut) et que la différence est inférieure à editing_grace_period_max_diff (100 caractères par défaut — une seule ligne Markdown d’image téléchargée fait environ 40 à 60 caractères), la modification ne crée aucune révision et aucune icône de crayon, rendant cette contournement complètement invisible dans l’interface.

Étapes pour reproduire

  1. Configurez skip_review_media_groups de sorte que les utilisateurs ordinaires (par exemple TL0/TL1) ne soient pas exemptés — les messages contenant des médias doivent nécessiter une approbation.
  2. En tant qu’utilisateur ordinaire, créez un message contenant uniquement du texte. Il est approuvé/publié normalement (pas de média → pas de modération).
  3. Dans la période de grâce, modifiez le message et insérez une image téléchargée.

Comportement attendu

Le message (contenant désormais des médias) devrait être envoyé à la file d’attente de modération, ou du moins la modification devrait être soumise à la même vérification des médias que lors de la création du message.

Comportement réel

  • Le message est publié avec l’image et n’entre jamais dans la file d’attente de modération.
  • Aucun enregistrement de révision n’est créé, aucun indicateur de modification n’est affiché.

Preuves (instance de production)

p.version                                   # => 1
PostRevision.where(post_id: p.id).count     # => 0
p.created_at                                # => 2026-07-30 07:33:28 UTC
p.updated_at                                # => 2026-07-30 07:34:00 UTC
UploadReference.where(target: p).pluck(:created_at)
                                            # => [2026-07-30 07:34:01 UTC]

Message texte seul créé à 07:33:28, image ajoutée par une modification environ 32 secondes plus tard — aucun historique de modification visible, aucune modération.

Code pertinent

  • lib/new_post_manager.rb — post_needs_approval? renvoie :contains_media via contains_embedded_media?, mais cela ne s’exécute que pour les nouveaux messages.
  • app/models/post_analyzer.rb#embedded_media_count — la logique de comptage des médias.
  • PostRevisor — aucune vérification des médias équivalente lors de la modification.

Correction suggérée

Exécuter la vérification contains_media dans PostRevisor également (lorsque la modification introduit des médias et que l’éditeur n’est pas dans skip_review_media_groups / n’est pas un membre du personnel), en mettant en file d’attente un ReviewablePost pour le message modifié.

1 « J'aime »