Se ho interpretato correttamente, questo funziona almeno come “previsto” dal codice:
TL3 non può modificare solo se l’argomento è archiviato o se è un messaggio privato.
Penso che tu possa modificare trusted_users_can_edit_others se desideri disabilitare questo comportamento. Per quanto ne so, il valore predefinito di trusted_users_can_edit_others non è false per mantenere un comportamento coerente con quello esistente prima dell’introduzione di questa impostazione.
Qual è allora lo scopo del blocco dei post? Non esiste. O non l’ho trovato, quindi la funzionalità è o obsoleta, malfunzionante o perlomeno confusa.
Il testo dice chiaramente “un membro dello staff ha bloccato questo post dall’essere modificato”. Se il blocco ha uno scopo completamente diverso dal proteggere il post/argomento OP dalle modifiche, questo testo dovrebbe essere modificato.
I post bloccati NON dovrebbero essere modificabili dagli utenti non appartenenti allo staff, nonostante l’impostazione che consente agli utenti con un alto livello di fiducia di modificare i post (che apprezziamo in generale, ma non per i post bloccati, ovviamente).
A quanto pare dal codice sottostante, “bloccare” un post significa attualmente che SOLO l’OP del post non può più modificarlo. TL3, TL4 (e lo staff) possono ancora modificare un post bloccato (se abilitato nelle impostazioni).
Ciò limita notevolmente la funzionalità di blocco a un caso d’uso estremamente ristretto.
Come posso proteggere un annuncio ufficiale molto importante dell’amministratore da un utente TL3 ribelle che lo modifica in “Questo è un post di Topolino”, lo etichetta in modo errato e lo sposta in una categoria non pertinente, ma allo stesso tempo voglio che gli utenti TL3/TL4 abbiano la possibilità di modificare i post in generale?
Bloccato dovrebbe significare bloccato (ad esempio, non modificabile) per tutti tranne lo staff.
def can_edit_topic?(topic)
return false if Discourse.static_doc_topic_ids.include?(topic.id) && !is_admin?
return false unless can_see?(topic)
return true if is_admin?
return true if is_moderator? && can_create_post?(topic)
# non è possibile modificare gli argomenti nelle categorie protette in cui non si hanno i permessi per crearne
# tranne per un piccolo caso limite in cui l'argomento non è categorizzato e si sta cercando
# di correggerlo ma la categoria non categorizzata è disabilitata
if (
SiteSetting.allow_uncategorized_topics ||
topic.category_id != SiteSetting.uncategorized_category_id
)
return false if !can_create_topic_on_category?(topic.category)
end
# Gli utenti TL4 possono modificare gli argomenti archiviati, ma non i messaggi privati
return true if (
SiteSetting.trusted_users_can_edit_others? &&
topic.archived &&
!topic.private_message? &&
user.has_trust_level?(TrustLevel[4]) &&
can_create_post?(topic)
)
# Gli utenti TL3 non possono modificare gli argomenti archiviati e i messaggi privati
return true if (
SiteSetting.trusted_users_can_edit_others? &&
!topic.archived &&
!topic.private_message? &&
user.has_trust_level?(TrustLevel[3]) &&
can_create_post?(topic)
)
return false if topic.archived
is_my_own?(topic) &&
!topic.edit_time_limit_expired?(user) &&
**!Post.where(topic_id: topic.id, post_number: 1).where.not(locked_by_id: nil).exists**
end
Il topic guardian permette agli utenti TL3 e TL4 di modificare un argomento/post bloccato (il primo post), ma il post guardian (vedi codice sottostante) impedisce agli utenti TL3 e TL4 di modificare un post non-OP bloccato:
def can_edit_post?(post)
if Discourse.static_doc_topic_ids.include?(post.topic_id) && !is_admin?
return false
end
return true if is_admin?
# Deve essere staff per modificare un post bloccato
return false if post.locked? && !is_staff?
@eviltrout è questo il comportamento previsto? Sarebbe più logico (e più utile come funzionalità per i post bloccati) se il topic guardian funzionasse nello stesso modo in cui il post guardian rispetta lo stato di blocco, a mio parere. Come detto, sono a favore del fatto che gli utenti TL3 e TL4 possano modificare i post non bloccati, ma non quelli bloccati (incluso il primo post).
L’ho già fatto. Ma solo guardando quanto diversamente i due guardiani gestiscono lo stato bloccato è di per sé confuso.
Dovrebbe essere come il post guardian gestisce lo stato bloccato, ovvero # Deve essere staff per modificare un post bloccato.
Voglio dire, attualmente i post non iniziali bloccati sono davvero bloccati (TL3+ non può modificare/alterare), mentre i post OP bloccati non sono affatto bloccati (a parte l’OP, TL3+ può ancora modificare/alterare). Questo non ha assolutamente senso per me, in particolare perché né TL3 né TL4 hanno il permesso di bloccare un post o un argomento.
Alla luce di ciò, anche gli OP bloccati dovrebbero essere davvero bloccati dalla possibilità di essere modificati dagli utenti TL3+, nonostante l’impostazione che consente loro di modificare post e argomenti (non bloccati).
Sì, è un bug e entrambi i guardiani dovrebbero bloccare un post indipendentemente dalla posizione e dall’impostazione che consente a TL3 e TL4 di modificare i post. Ho fatto del mio meglio per spiegarlo in tutti i dettagli.