Utente in grado di modificare il titolo di un post bloccato (ancora/di nuovo possibile)

Questo argomento è stato chiuso:

Ma sulla nostra installazione (l’ultima versione di Discourse), questo è ancora/nuovamente possibile per un utente TL3+.

I TL3 possono modificare il titolo dell’OP, la categoria e i tag anche nei post bloccati.

Un amministratore blocca il post:

Un TL3 può comunque modificare/alterare il post bloccato:

Funziona come previsto (speriamo di no) o è un vecchio bug che ricompare nel codice?

1 Mi Piace

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.

3 Mi Piace

Qual è allora lo scopo del blocco dei post? Non esiste. O non l’ho trovato, quindi la funzionalità è o obsoleta, malfunzionante o perlomeno confusa.

image

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
2 Mi Piace

E diventa ancora più confuso…

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).

1 Mi Piace

Vale la pena dare un’occhiata ai file rspec.

1 Mi Piace

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).

2 Mi Piace

Questo sembra proprio un bug @j.jaffeux: un post bloccato non dovrebbe essere modificabile da nessuno tranne lo staff, altrimenti qual è il senso?

5 Mi Piace

Grazie per averlo confermato @codinghorror

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.

1 Mi Piace

Puoi assegnare questo a @eviltrout? Il comportamento attuale non mi sembra corretto.

1 Mi Piace

Ho aperto una PR qui

Unita, chiudo questo argomento.

5 Mi Piace