L'utilisateur peut modifier le titre d'un post verrouillé (toujours/à nouveau possible)

Ce sujet a été fermé :

Mais sur notre installation (la toute dernière version de Discourse), cela reste de nouveau possible pour un utilisateur de niveau TL3 ou supérieur.

Un utilisateur TL3 peut modifier le titre de l’OP, la catégorie et les tags, même sur des sujets verrouillés.

Un administrateur verrouille le sujet :

Un utilisateur TL3 peut toujours modifier le sujet verrouillé :

Ceci est-il le comportement attendu (ce qui serait surprenant) ou s’agit-il d’un ancien bug qui réapparaît dans le code ?

1 « J'aime »

Si j’ai bien compris, cela fonctionne comme « prévu » par le code, du moins :

Les utilisateurs de niveau TL3 ne peuvent modifier un sujet que s’il n’est pas archivé et s’il ne s’agit pas d’un message privé.

Je pense que vous pouvez modifier trusted_users_can_edit_others si vous souhaitez désactiver ce comportement. À ma connaissance, la valeur par défaut de trusted_users_can_edit_others n’est pas false afin de conserver un comportement cohérent avec celui d’avant l’introduction de ce paramètre.

3 « J'aime »

Quel est alors l’intérêt de verrouiller les publications ? Il n’y en a aucun. Ou je n’en ai pas trouvé, ce qui signifie que cette fonctionnalité est soit obsolète, soit dysfonctionnelle, ou du moins confuse.

image

Le texte indique clairement : « un membre du personnel a verrouillé cette publication pour empêcher toute modification ». Si le verrouillage a un tout autre objectif que de protéger le sujet ou la publication originale (OP) contre toute modification, ce texte devrait être modifié.

Les publications verrouillées ne doivent PAS être modifiables par les utilisateurs non membres du personnel, malgré le paramètre autorisant les utilisateurs ayant un niveau de confiance élevé à modifier les publications (ce que nous apprécions en général, mais pas pour les publications verrouillées, bien sûr).

À en juger par le code ci-dessous, « verrouiller » une publication signifie actuellement que SEUL l’auteur original (OP) de la publication ne peut plus la modifier. Les niveaux de confiance TL3 et TL4 (ainsi que le personnel) peuvent toujours modifier une publication verrouillée (si cela est activé dans les paramètres).

Cela limite considérablement la fonctionnalité de verrouillage à un cas d’usage extrêmement restreint.

Comment puis-je protéger une annonce officielle très importante de l’administration contre la modification par un utilisateur TL3 malveillant en « Ceci est un post Mickey Mouse », avec un mauvais tag et un déplacement dans une catégorie non pertinente, tout en souhaitant que les utilisateurs TL3/TL4 conservent la capacité de modifier des publications en général ?

Verrouillé devrait signifier verrouillé (c’est-à-dire non modifiable) pour tous, sauf pour le personnel.

  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)

    # Impossible de modifier les sujets dans des catégories sécurisées où vous n'avez pas la permission de créer des sujets
    # sauf pour un cas très particulier où le sujet n'a pas de catégorie et où vous essayez
    # de le corriger, mais que les sujets sans catégorie sont désactivés
    if (
      SiteSetting.allow_uncategorized_topics ||
      topic.category_id != SiteSetting.uncategorized_category_id
    )
      return false if !can_create_topic_on_category?(topic.category)
    end

    # Les utilisateurs TL4 peuvent modifier les sujets archivés, mais pas les messages privés
    return true if (
      SiteSetting.trusted_users_can_edit_others? &&
      topic.archived &&
      !topic.private_message? &&
      user.has_trust_level?(TrustLevel[4]) &&
      can_create_post?(topic)
    )

    # Les utilisateurs TL3 ne peuvent pas modifier les sujets archivés ni les messages privés
    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 « J'aime »

Et cela devient encore plus confus…

Le topic guardian permet aux utilisateurs TL3 et TL4 de modifier un sujet/post verrouillé (le premier post), mais le post guardian (voir le code ci-dessous) interdit aux utilisateurs TL3 et TL4 de modifier un post non-OP verrouillé :

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?

# Il faut être membre du personnel pour modifier un post verrouillé
return false if post.locked? && !is_staff?

@eviltrout est-ce le comportement prévu ? Il serait plus logique (et plus utile en tant que fonctionnalité de verrouillage) que le topic guardian fonctionne de la même manière que le post guardian respecte l’état de verrouillage, à mon avis. Comme mentionné, je suis favorable à ce que les utilisateurs TL3 et TL4 puissent modifier les posts non verrouillés, mais pas ceux qui sont verrouillés (y compris le premier post).

1 « J'aime »

Ça vaut le coup de jeter un œil aux fichiers rspec.

1 « J'aime »

Je l’ai déjà fait. Mais simplement observer la façon dont les deux gardiens gèrent l’état verrouillé est en soi déroutant.

Ce devrait être la manière dont le gardien de publication gère l’état verrouillé, c’est-à-dire : # Seuls les membres du personnel peuvent modifier un post verrouillé.

Je veux dire qu’actuellement, les posts non-premiers verrouillés sont vraiment verrouillés (les utilisateurs TL3+ ne peuvent pas les modifier/altérer), tandis que les posts OP verrouillés ne le sont pas du tout (hormis pour l’OP, les utilisateurs TL3+ peuvent toujours les modifier/altérer). Cela n’a aucun sens pour moi, d’autant plus que ni les TL3 ni les TL4 n’ont la permission de verrouiller un post ou un sujet.

Compte tenu de cela, les OP verrouillés devraient également être vraiment verrouillés pour empêcher toute modification par les utilisateurs TL3+, malgré le paramètre leur permettant de modifier les posts et sujets (non verrouillés).

2 « J'aime »

Cela ressemble vraiment à un bug @j.jaffeux – un sujet verrouillé ne devrait être modifiable que par le personnel, sinon, à quoi ça sert ?

5 « J'aime »

Merci d’avoir reconnu cela @codinghorror

Oui, c’est un bug et les deux gardiens devraient vraiment verrouiller un sujet, indépendamment de sa position et du paramètre autorisant les utilisateurs TL3 et TL4 à modifier les messages. J’ai vraiment fait de mon mieux pour tout expliquer en détail.

1 « J'aime »

Peux-tu attribuer celui-ci à @eviltrout ? Le comportement actuel ne me semble pas correct.

1 « J'aime »

J’ai ouvert une PR ici

Fusionnée, je ferme ce sujet.

5 « J'aime »