Dividi 'elimina tutti i post e gli argomenti consentiti dai gruppi' in permessi per contenuti propri e contenuti globali

Vorrei suggerire di suddividere l’impostazione “Gruppi autorizzati a eliminare tutti i post e gli argomenti” in permessi più specifici.

Attualmente, l’impostazione è ampia: consente ai gruppi selezionati di eliminare post e argomenti creati da altri utenti e anche di visualizzare post/argomenti eliminati. Questo ha senso per i moderatori o per gruppi di moderazione fidati, ma è troppo potente per un caso d’uso in cui si desidera solo che gli utenti abbiano un maggiore controllo sul proprio contenuto.

Per chiarire, non mi riferisco all’eliminazione permanente/definitiva dal database.

Mi sto principalmente riferendo al comportamento ordinario di eliminazione/cronologia delle revisioni visibile all’utente: ad esempio, quando un utente elimina il proprio post, se viene lasciato il solito segnaposto per il post eliminato, se il contenuto delle precedenti modifiche rimane accessibile tramite l’interfaccia della cronologia delle revisioni e se potrebbe essere introdotto un permesso più specifico per gestire questo aspetto solo sui post di un utente.

Una possibile suddivisione potrebbe essere:

  1. Gruppi autorizzati a eliminare i propri post e argomenti
  2. Gruppi autorizzati a eliminare tutti i post e gli argomenti

La prima impostazione si applicherebbe solo ai contenuti creati dall’utente corrente. La seconda manterrebbe il comportamento attuale più ampio per i gruppi fidati che possono eliminare i contenuti di altri utenti e visualizzare i contenuti eliminati.

Ciò faciliterebbe l’adozione di un design dei ruoli basato sul principio del privilegio minimo. Ad esempio, un sito potrebbe voler concedere agli utenti TL4/Leader, o a un gruppo fidato personalizzato, un maggiore controllo sull’eliminazione dei propri post/argomenti senza dover loro conferire anche poteri di moderazione sui contenuti di altri utenti.

Sono consapevole che sarebbero necessarie delle salvaguardie, specialmente quando l’eliminazione del primo post influisce su un argomento contenente risposte di altri utenti. In tali casi, Discourse potrebbe mantenere l’attuale restrizione, richiedere l’intervento di un moderatore o limitare il permesso relativo al proprio contenuto alle risposte/argomenti privi di risposte.

La richiesta principale è per un permesso di eliminazione/cronologia delle revisioni relativo al proprio contenuto, distinto dall’attuale permesso globale di eliminazione, in modo che gli amministratori non debbano scegliere tra l’eliminazione soft per gli utenti ordinari e un permesso molto più ampio come “può eliminare i post/argomenti di altri utenti”.

Credo che parte della confusione qui derivi dal fatto che potrebbero esserci distinzioni tra diversi controlli per “visualizzare contenuti eliminati”.

Esaminando PostGuardian, sembra che un singolo post eliminato non diventi visibile tramite can_see_post? semplicemente perché l’utente appartiene a delete_all_posts_and_topics_allowed_groups.

Ad esempio, la visibilità dei singoli post eliminati sembra passare attraverso:

def can_see_deleted_post?(post)
  return false if !post.trashed?
  return false if @user.anonymous?
  return true if is_staff?
  post.deleted_by_id == @user.id && @user.has_trust_level?(TrustLevel[4])
end

Quindi, un utente non di staff con livello di fiducia 2 (TL2) che appartiene a delete_all_posts_and_topics_allowed_groups non sarebbe necessariamente in grado di aprire o leggere il corpo di ogni post eliminato tramite can_see_post?.

Tuttavia, la stessa impostazione viene utilizzata anche qui:

def can_see_deleted_posts?(category = nil)
  is_category_group_moderator?(category) ||
    @user.in_any_groups?(SiteSetting.delete_all_posts_and_topics_allowed_groups_map)
end

Ciò significa che l’impostazione è concettualmente più ampia del semplice «l’autore può ritirare i propri contenuti». Sembra essere utilizzata sia per eliminare post visibili di altri utenti, sia per alcune funzionalità di visualizzazione/elenco dei post eliminati.

La mia preoccupazione è quindi meno «questa impostazione espone sicuramente il corpo di ogni post eliminato in ogni endpoint» e più che l’attuale combinazione di permessi unisce diversi concetti:

  1. eliminare post/argomenti di altri utenti;
  2. vedere o elencare post/argomenti eliminati in alcuni contesti;
  3. offrire agli autori un maggiore controllo sulla propria impronta digitale.

Per il mio caso d’uso, vorrei solo il terzo punto.

È per questo motivo che penso che un’impostazione dedicata ai propri contenuti sarebbe più chiara. Potrebbe consentire a un utente di eliminare/ritirare i propri post/argomenti, nel rispetto delle salvaguardie esistenti, senza concedere permessi più ampi di moderazione sui contenuti di altri utenti o sulla visibilità dei contenuti eliminati.

Per chiarire il comportamento dell’interfaccia, ecco cosa vorrei: non sto chiedendo che i contenuti cancellati diventino visibili agli utenti ordinari.

Per una autorizzazione alla cancellazione dei propri contenuti, il comportamento ideale sarebbe sensibile al visualizzatore:

  • l’autore può vedere che il proprio post è stato ritirato/cancellato, magari con lo stile rosso tipico dei post cancellati o in uno stato collassato, in modo da comprendere cosa è accaduto e poterlo recuperare se il recupero è consentito;
  • lo staff/moderatori mantengono qualsiasi visibilità di audit e moderazione sia appropriata;
  • gli utenti ordinari non dovrebbero vedere alcuna traccia del contenuto cancellato: nessun corpo del post, nessuna cronologia delle revisioni e, idealmente, nessun segnaposto per post cancellato.

Quindi la distinzione che chiedo è il controllo dell’autore sulla propria impronta visibile, senza concedere agli utenti non appartenenti allo staff la visibilità dei contenuti cancellati o il potere globale sui post/argomenti di altri utenti.

Un’ulteriore sfumatura è la cronologia delle revisioni.

Dall’analisi di PostRevisor, la cronologia delle modifiche viene archiviata separatamente tramite PostRevision, quindi non sto suggerendo che un permesso di eliminazione del contenuto proprio debba necessariamente cancellare definitivamente i record di revisione o rimuovere la tracciabilità.

Il permesso che ho in mente riguarda più la visibilità per l’utente medio: se l’autore può ritirare il proprio post/argomento, se rimane il segnaposto per il post eliminato, se gli utenti ordinari possono visualizzare il contenuto delle modifiche precedenti e se il personale/moderatori mantengono l’accesso di audit/moderazione appropriato (ad esempio tramite “VEDI N RISPOSTA NASCOSTA”).

Quindi la distinzione che chiedo non è:

  • “consentire agli utenti di cancellare tutte le tracce dal database”

ma piuttosto:

  • “consentire agli utenti di avere maggiore controllo sul proprio contenuto/orma visibile”
  • senza concedere loro al contempo poteri globali per eliminare il contenuto di altri utenti o visualizzare generalmente i contenuti eliminati.