잠긴 게시물의 제목을 수정할 수 있습니다 (여전히/다시 가능)

이 주제는 폐쇄되었습니다:

하지만 저희 설치 환경(최신 Discourse)에서는 여전히 TL3+ 사용자에게 이것이 가능합니다.

TL3 사용자는 잠긴 게시물에서도 OP의 제목, 카테고리, 태그를 변경할 수 있습니다.

관리자가 게시물을 잠금:

TL3 사용자는 여전히 잠긴 게시물을 편집/변경할 수 있습니다:

이것이 의도된 동작(아니길 바랍니다)인지, 아니면 코드 속에 다시 기어 나오는 오래된 버그인가요?

1개의 좋아요

제가 제대로 이해했다면, 이는 해당 코드가 의도한 대로 작동하고 있는 것 같습니다:

TL3는 토픽이 아카이브되었거나 PM인 경우에만 편집할 수 없습니다.

이 동작을 비활성화하려면 trusted_users_can_edit_others를 변경할 수 있다고 생각합니다. AFAIK, trusted_users_can_edit_others의 기본값이 false가 아닌 이유는 이 설정이 도입되기 전의 동작과 일관성을 유지하기 위해서입니다.

3개의 좋아요

그렇다면 게시물을 잠금 처리하는 목적은 무엇일까요? 목적은 없습니다. 혹은 제가 찾지 못했을 뿐이지만, 이 기능은 구식이거나, 기능이 손상되었거나, 적어도 혼란을 야기하고 있습니다.

image

텍스트에는 분명히 "스태프가 이 게시물의 편집을 잠금 처리했습니다"라고 나와 있습니다. 잠금 처리의 목적이 게시물/토픽 작성자(OP)의 편집을 보호하는 것과 완전히 다르다면, 이 텍스트를 변경해야 합니다.

잠금 처리된 게시물은 설정에서 높은 신뢰도 레벨(TL)의 사용자가 게시물을 편집할 수 있다고 하더라도(일반적으로는 좋지만, 잠금 처리된 게시물은 당연히 예외입니다), 비스태프 사용자는 편집할 수 없어야 합니다.

아래 코드에서 보듯, 현재 "잠금"은 게시물의 작성자(OP)만 더 이상 게시물을 편집할 수 없음을 의미합니다. TL3, TL4(및 스태프)는 설정에서 활성화되어 있다면 잠금 처리된 게시물을 여전히 편집할 수 있습니다.

이는 잠금 기능을 극도로 제한적인 사용 사례로만 한정짓고 있습니다.

매우 중요한 공식 관리자 공지사항을 한 명의 악의적인 TL3 사용자가 "이것은 미키 마우스 게시물입니다"로 변경하고, 태그를 잘못 지정하고, 관련 없는 카테고리로 이동시키는 것을 막으면서도, 여전히 TL3/TL4 사용자가 일반적으로 게시물을 편집할 수 있는 능력을 갖고 싶다면 어떻게 해야 할까요?

잠금(Locked)은 스태프를 제외한 모든 사람에게 잠금(예: 편집 불가)을 의미해야 합니다.

  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)

    # 토픽 생성 권한이 없는 보안 카테고리에서는 토픽을 편집할 수 없습니다.
    # 단, 카테고리가 지정되지 않은 토픽을 수정하려는 아주 작은 예외적인 경우를 제외합니다.
    # (이때 미분류 카테고리가 비활성화되어 있는 경우)
    if (
      SiteSetting.allow_uncategorized_topics ||
      topic.category_id != SiteSetting.uncategorized_category_id
    )
      return false if !can_create_topic_on_category?(topic.category)
    end

    # TL4 사용자는 아카이브된 토픽을 편집할 수 있지만, 개인 메시지는 편집할 수 없습니다.
    return true if (
      SiteSetting.trusted_users_can_edit_others? &&
      topic.archived &&
      !topic.private_message? &&
      user.has_trust_level?(TrustLevel[4]) &&
      can_create_post?(topic)
    )

    # TL3 사용자는 아카이브된 토픽과 개인 메시지를 편집할 수 없습니다.
    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개의 좋아요

그리고 더 혼란스러워집니다…

topic guardian은 TL3 및 TL4 사용자가 잠금된 주제/게시물(1번 게시물)을 편집할 수 있게 허용하지만, post guardian(아래 코드 참조)는 TL3 및 TL4 사용자가 잠금된 비-OP(첫 번째 게시물이 아닌) 게시물을 편집하는 것을 허용하지 않습니다:

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?

# Must be staff to edit a locked post
return false if post.locked? && !is_staff?

@eviltrout 의도된 동작이 이런가요? 제 생각에는 주제 가디언이 게시물 가디언이 잠금 상태를 존중하는 방식과 동일하게 작동하는 것이 더 논리적(그리고 잠금 기능으로서 더 가치)이라고 봅니다. 앞서 말했듯이, TL3과 TL4가 잠금되지 않은 게시물을 편집하는 것은 괜찮지만, 잠금된 게시물(첫 번째 게시물 포함)은 편집할 수 없어야 합니다.

1개의 좋아요

rspec 파일들을 살펴볼 가치가 있습니다.

1개의 좋아요

이미 확인했습니다. 하지만 두 가디언이 잠금 상태를 어떻게 다르게 처리하는지 살펴보는 것만으로도 혼란스럽습니다.

게시물 가디언이 잠금 상태를 처리하는 방식, 즉 # 잠긴 게시물을 수정하려면 스태프여야 합니다와 같은 방식으로 되어야 합니다.

현재 잠긴 첫 게시물이 아닌 게시물들은 실제로 잠겨 있습니다(TL3+도 수정/변경 불가), 반면 잠긴 OP(첫 게시물)는 전혀 잠겨 있지 않습니다(OP를 제외하고, TL3+도 여전히 수정/변경 가능). 특히 TL3이나 TL4는 게시물이나 토픽을 잠그는 권한조차 없기 때문에, 이는 전혀 말이 되지 않습니다.

이 점을 고려할 때, (잠기지 않은) 게시물과 토픽을 수정할 수 있도록 허용하는 설정에도 불구하고, 잠긴 OP도 TL3+ 사용자가 수정할 수 없도록 실제로 잠겨야 합니다.

2개의 좋아요

이건 버그인 것 같아요 @j.jaffeux – 잠긴 게시글은 스태프를 제외하고는 아무도 수정할 수 없어야 하는데, 그래야 의미가 있잖아요?

5개의 좋아요

@codinghorhor 님, 확인해 주셔서 감사합니다.

네, 버그입니다. TL3과 TL4가 게시물을 편집할 수 있도록 허용하는 설정과 관계없이, 두 가디언 모두 위치와 무관하게 게시물을 잠금 처리해야 합니다. 모든 세부 사항을 최대한 자세히 설명해 드렸는데, 이해해 주셨으면 좋겠습니다.

1개의 좋아요

@eviltrout 이 이슈를 담당해 주시겠어요? 현재 동작 방식이 이상한 것 같아요.

1개의 좋아요

여기 PR을 열었습니다

병합되었으므로 이 주제를 닫겠습니다.

5개의 좋아요