El usuario puede editar el título de una publicación bloqueada (aún/de nuevo posible)

Este tema ha sido cerrado:

Pero en nuestra instalación (la versión más reciente de Discourse), esto sigue siendo posible, o nuevamente posible, para un usuario con nivel TL3 o superior.

Un usuario TL3 puede modificar el título del mensaje original, la categoría y las etiquetas incluso en mensajes bloqueados.

El administrador bloquea el mensaje:

Un usuario TL3 aún puede editar/modificar el mensaje bloqueado:

¿Esto funciona como se esperaba (espero que no) o es un error antiguo que vuelve a aparecer en el código?

1 me gusta

Si he entendido bien, esto funciona como “previsto” por el código, al menos:

Los usuarios de nivel 3 no pueden editar solo si el tema está archivado o es un mensaje privado.

Creo que puedes cambiar trusted_users_can_edit_others si deseas desactivar este comportamiento. Por lo que sé, el valor predeterminado de trusted_users_can_edit_others no es false para mantener la coherencia con el comportamiento anterior a la introducción de esta configuración.

3 Me gusta

¿Cuál es entonces el propósito de bloquear publicaciones? No hay ninguno. O no he encontrado uno, por lo que la función está obsoleta, es disfuncional o, al menos, confusa.

image

El texto dice claramente: “un miembro del personal ha bloqueado esta publicación para que no sea editada”. Si el bloqueo tiene un propósito completamente diferente al de proteger al autor original (OP) de la publicación o tema de ser editado, este texto debería cambiarse.

Las publicaciones bloqueadas NO deben ser editables por usuarios que no sean del personal, a pesar de la configuración que permite a los usuarios con nivel de confianza alto editar publicaciones (lo cual nos gusta en general, pero no para publicaciones bloqueadas, por supuesto).

Parece que, según el código siguiente, “bloquear” una publicación actualmente significa que SOLO el OP de la publicación ya no puede editarla. Los usuarios TL3, TL4 (y el personal) aún pueden editar una publicación bloqueada (si está habilitado en la configuración).

Esto limita mucho la función de bloqueo a un caso de uso extremadamente limitado.

¿Cómo puedo proteger un anuncio oficial muy importante de un administrador de que un usuario TL3 malintencionado lo cambie a “Esto es una publicación de Mickey Mouse”, lo etiquete incorrectamente y lo mueva a una categoría no relevante, pero al mismo tiempo quiera que los usuarios TL3/TL4 tengan la capacidad de editar publicaciones en general?

Bloqueado debería significar bloqueado (es decir, no editable) para todos, excepto el personal.

  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)

    # no se pueden editar temas en categorías seguras donde no tienes permiso para crear temas
    # excepto en un caso muy específico donde el tema no tiene categoría y estás intentando
    # arreglarlo, pero las categorías sin asignar están deshabilitadas
    if (
      SiteSetting.allow_uncategorized_topics ||
      topic.category_id != SiteSetting.uncategorized_category_id
    )
      return false if !can_create_topic_on_category?(topic.category)
    end

    # Los usuarios TL4 pueden editar temas archivados, pero no mensajes privados
    return true if (
      SiteSetting.trusted_users_can_edit_others? &&
      topic.archived &&
      !topic.private_message? &&
      user.has_trust_level?(TrustLevel[4]) &&
      can_create_post?(topic)
    )

    # Los usuarios TL3 no pueden editar temas archivados ni mensajes privados
    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 Me gusta

Y se vuelve aún más confuso…

El topic guardian permite a los usuarios de nivel TL3 y TL4 editar un tema/publicación bloqueado (el primer mensaje), pero el post guardian (véase el código a continuación) impide que los usuarios de nivel TL3 y TL4 editen un mensaje no original bloqueado:

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?

  # Debe ser personal para editar un mensaje bloqueado
  return false if post.locked? && !is_staff?

@eviltrout, ¿es esto lo previsto? En mi opinión, sería más lógico (y más valioso como característica de bloqueo) que el topic guardian funcionara de la misma manera en que el post guardian respeta el estado de bloqueo. Como he dicho, estoy de acuerdo en que los usuarios TL3 y TL4 puedan editar mensajes no bloqueados, pero no los bloqueados (esto incluye el primer mensaje).

1 me gusta

Vale la pena echar un vistazo a los archivos rspec.

1 me gusta

Ya lo hice. Pero simplemente observar cómo ambos guardianes tratan el estado bloqueado es confuso en sí mismo.

Debería ser como lo maneja el guardián de publicaciones: # Solo el personal puede editar una publicación bloqueada.

Quiero decir que actualmente, las publicaciones no iniciales bloqueadas están realmente bloqueadas (los usuarios con nivel de confianza 3 o superior no pueden editarlas ni modificarlas), mientras que las publicaciones iniciales (OP) bloqueadas no lo están en absoluto (salvo para el OP, los usuarios TL3+ aún pueden editarlas o modificarlas). Esto no tiene ningún sentido para mí, especialmente porque ni los usuarios TL3 ni los TL4 tienen permiso para bloquear una publicación o un tema.

A la luz de esto, las publicaciones iniciales bloqueadas también deberían estar realmente bloqueadas para que los usuarios TL3+ no puedan editarlas, a pesar de la configuración que les permite editar publicaciones y temas (no bloqueados).

2 Me gusta

Esto sí parece un error, @j.jaffeux. Un tema bloqueado no debería ser editable por nadie excepto el personal; de lo contrario, ¿cuál es el sentido?

5 Me gusta

Gracias por reconocerlo @codinghorror

Sí, es un error y ambos guardianes deberían bloquear realmente un publicación independientemente de la posición y de la configuración que permite a los niveles TL3 y TL4 editar publicaciones. Hice todo lo posible por explicarlo con todo detalle.

1 me gusta

¿Puedes asignar este a @eviltrout? El comportamiento actual no me parece correcto.

1 me gusta

He abierto un PR aquí

Fusionado, cerrando este tema.

5 Me gusta