Le modifiche nel periodo di grazia aggirano la revisione dei media `skip_review_media_groups`

Riepilogo

Il controllo “review media” (impostazione sito skip_review_media_groups) viene applicato solo al momento della creazione del post, in NewPostManager. Le modifiche passano attraverso PostRevisor, che non esegue mai il controllo dei media. Un utente può quindi pubblicare inizialmente del testo semplice (passando la revisione), per poi aggiungere immagini tramite una modifica — e il post non entra mai nella coda di revisione.

Peggio ancora, se la modifica avviene entro il editing_grace_period (5 minuti di default) e la differenza è inferiore a editing_grace_period_max_diff (100 caratteri di default — una singola riga markdown per un’immagine caricata è di circa 40–60 caratteri), la modifica non crea nessuna revisione e nessuna icona della matita, rendendo il bypass completamente invisibile nell’interfaccia utente.

Passaggi per riprodurre il problema

  1. Configurare skip_review_media_groups in modo che gli utenti normali (es. TL0/TL1) non siano esenti — i post con media dovrebbero richiedere approvazione.
  2. Come utente normale, creare un post contenente solo testo. Viene approvato/pubblicato normalmente (nessun media → nessuna revisione).
  3. Entro il periodo di grazia, modificare il post e inserire un’immagine caricata.

Attesa

Il post (che ora contiene media) dovrebbe essere inviato alla coda di revisione, o almeno la modifica dovrebbe essere soggetta allo stesso controllo dei media applicato alla creazione del post.

Reale

  • Il post viene pubblicato con l’immagine e non entra mai nella coda di revisione.
  • Non viene creato alcun record di revisione, non viene mostrato alcun indicatore di modifica.

Prove (istanza di produzione)

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]

Post di solo testo creato alle 07:33:28, immagine aggiunta tramite modifica circa 32 secondi dopo — nessun storico di modifiche visibile, nessuna revisione.

Codice rilevante

  • lib/new_post_manager.rb — post_needs_approval? restituisce :contains_media tramite contains_embedded_media?, ma questo viene eseguito solo per i nuovi post.
  • app/models/post_analyzer.rb#embedded_media_count — la logica di conteggio dei media.
  • PostRevisor — nessun controllo equivalente dei media sulle modifiche.

Soluzione suggerita

Eseguire il controllo contains_media anche in PostRevisor (quando la modifica introduce media e l’editore non è in skip_review_media_groups / non è dello staff), accodando un ReviewablePost per il post modificato.

1 Mi Piace