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

**URL:** https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547
**Category:** Feature
**Created:** [19 Septiembre, 2020 12:18 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547 "2020-09-19T12:18:44Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [19 Septiembre, 2020 12:18 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/1 "2020-09-19T12:18:44Z")

</div>

Este tema ha sido cerrado:

> [@User able to edit title of locked post](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post/104826/3):
>
> I’d locked the first post

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:

 ![image](https://global.discourse-cdn.com/meta/original/3X/f/e/fee5f8fd0a4709484526b21cbdf6dfee017dab43.jpeg)

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

 ![image](https://global.discourse-cdn.com/meta/original/3X/7/5/75371b3a798bf5fde3e5be45a774e9e2b40eaa2e.jpeg)

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

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [20 Septiembre, 2020 10:29 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/2 "2020-09-20T10:29:06Z")

</div>

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

> <https://github.com/discourse/discourse/blob/main/lib/guardian/topic_guardian.rb#L101>

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.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [20 Septiembre, 2020 11:32 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/3 "2020-09-20T11:32:31Z")

</div>

¿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](https://global.discourse-cdn.com/meta/original/3X/1/3/136fbccb646f70ee0ab2904ef925f6adce10437a.png)

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

```

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [20 Septiembre, 2020 16:51 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/4 "2020-09-20T16:51:24Z")

</div>

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:

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

---

<div class="post-metadata">

### Author: ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)
#### Post date: [20 Septiembre, 2020 17:03 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/5 "2020-09-20T17:03:46Z")

</div>

Vale la pena echar un vistazo a los archivos rspec.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [20 Septiembre, 2020 17:04 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/6 "2020-09-20T17:04:28Z")

</div>

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

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [21 Septiembre, 2020 00:46 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/7 "2020-09-21T00:46:48Z")

</div>

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?

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [21 Septiembre, 2020 08:16 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/8 "2020-09-21T08:16:52Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [21 Septiembre, 2020 19:51 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/9 "2020-09-21T19:51:55Z")

</div>

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

---

<div class="post-metadata">

### Author: ![markvanlan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/markvanlan/32/160087_2.png) [@markvanlan](https://meta.discourse.org/u/markvanlan)
#### Post date: [23 Septiembre, 2020 14:35 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/12 "2020-09-23T14:35:01Z")

</div>

He abierto un PR aquí

> <https://github.com/discourse/discourse/pull/10729>
>
> This is addressing the meta topic here https://meta.discourse.org/t/user-able-to…-edit-title-of-locked-post-still-again-possible/164547?u=markvanlan

Fusionado, cerrando este tema.

---

<div class="post-metadata">

### Author: ![markvanlan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/markvanlan/32/160087_2.png) [@markvanlan](https://meta.discourse.org/u/markvanlan)
#### Post date: [23 Septiembre, 2020 16:13 UTC](https://meta.discourse.org/t/user-able-to-edit-title-of-locked-post-still-again-possible/164547/13 "2020-09-23T16:13:55Z")

</div>


