“모든 게시글과 주제 삭제 허용 그룹”을 자체 콘텐츠 및 글로벌 콘텐츠 권한으로 분리

모든 게시글 및 주제 삭제 허용 그룹 설정을 더 세분화된 권한으로 분리하는 것을 제안합니다.

현재 이 설정은 범위가 넓습니다. 선택된 그룹이 다른 사용자가 생성한 게시글과 주제를 삭제할 수 있고, 삭제된 게시글/주제를 볼 수도 있습니다. 이는 관리자나 신뢰할 수 있는 모더레이션 그룹에게는 적합하지만, 사용자의 콘텐츠에 대한 통제만 강화하려는 사용 사례에는 권한이 과도합니다.

정리하자면, 저는 데이터베이스에서의 영구 삭제/하드 삭제를 의미하는 것이 아닙니다.

주요 요청 사항은 일반 사용자 인터페이스의 삭제/수정 이력 동작에 관한 것입니다. 예를 들어, 사용자가 자신의 게시글을 삭제할 때 일반적인 삭제된 게시글 플레이스홀더가 남는지, 이전 편집 내용이 수정 이력 UI를 통해 여전히 접근 가능한지, 그리고 사용자의 게시글에 대해서만 이를 관리할 수 있는 더 좁은 권한이 존재할 수 있는지에 대한 것입니다.

가능한 분리 방식은 다음과 같습니다:

  1. 자신의 게시글 및 주제 삭제 허용 그룹
  2. 모든 게시글 및 주제 삭제 허용 그룹

첫 번째 설정은 현재 사용자가 작성한 콘텐츠에만 적용됩니다. 두 번째 설정은 다른 사용자의 콘텐츠를 삭제하고 삭제된 콘텐츠를 볼 수 있는 권한이 있는 그룹에 대해 현재의 더 넓은 동작을 유지합니다.

이렇게 하면 최소 권한 역할 설계를 따르기 쉬워집니다. 예를 들어, 사이트는 TL4/리더 사용자나 사용자 정의 신뢰 그룹이 다른 사용자의 콘텐츠에 대한 모더레이션 수준의 권한을 부여받지 않고도 자신의 게시글/주제를 삭제하는 데 대한 더 많은 통제를 가질 수 있도록 원할 수 있습니다.

특히 첫 번째 게시글 삭제가 다른 사용자의 답변을 포함하는 주제에 영향을 미치는 경우와 같은 상황에서 안전 장치가 필요할 것이라는 점은 인식하고 있습니다. 이러한 경우 Discourse는 현재 제한 사항을 유지하거나, 관리자 개입을 요구하거나, 자신의 콘텐츠 권한을 답변이 없는 답변/주제로 제한할 수 있습니다.

주요 요청 사항은 현재 전역 삭제 권한과 분리된 자신의 콘텐츠 삭제/수정 이력 권한입니다. 이를 통해 관리자가 일반 사용자의 소프트 삭제와 "다른 사용자의 게시글/주제를 삭제할 수 있다"는 훨씬 더 광범위한 권한 사이에서 선택해야 하는 상황을 피할 수 있습니다.

여기서 혼란의 일부 원인은 "삭제된 콘텐츠 보기"에 대한 여러 가지 다른 체크 로직이 구분되어 있을 수 있기 때문이라고 생각합니다.

PostGuardian을 살펴보면, 개별적으로 삭제된 게시물이 사용자가 delete_all_posts_and_topics_allowed_groups에 속한다고 해서 can_see_post?를 통해 단순히 표시되지는 않는 것으로 보입니다.

예를 들어, 개별 삭제된 게시물의 가시성은 다음과 같은 로직을 따르는 것 같습니다:

def can_see_deleted_post?(post)
  return false if !post.trashed?
  return false if @user.anonymous?
  return true if is_staff?
  post.deleted_by_id == @user.id && @user.has_trust_level?(TrustLevel[4])
end

따라서 스태프가 아닌 TL2 사용자는 delete_all_posts_and_topics_allowed_groups에 속하더라도 can_see_post?를 통해 모든 삭제된 게시물의 본문을 열어서 읽을 수 있는 것은 아닙니다.

그러나 동일한 설정은 여기에서도 사용됩니다:

def can_see_deleted_posts?(category = nil)
  is_category_group_moderator?(category) ||
    @user.in_any_groups?(SiteSetting.delete_all_posts_and_topics_allowed_groups_map)
end
```\n즉, 이 설정은 단순히 "저자가 자신의 콘텐츠를 철회할 수 있다"는 개념보다 여전히 더 넓은 범위를 포괄합니다. 다른 사용자의 표시 중인 게시물 삭제와 일부 삭제된 게시물 가시성/목록 표시 기능에 모두 사용되는 것으로 보입니다.

따라서 제 우려는 "이 설정이 모든 엔드포인트에서 모든 삭제된 게시물 본문을 확실히 노출한다"는 것보다는, 현재 권한이 여러 개념을 결합하고 있다는 점에 더 가깝습니다:

1. 다른 사용자의 게시물/토픽 삭제;
2. 특정 컨텍스트에서 삭제된 게시물/토픽 보기 또는 목록 보기;
3. 저자에게 자신의 발자취에 대한 더 많은 제어 권한 부여.

제 사용 사례에서는 세 번째 기능만 필요합니다.

그래서 저는 자체 콘텐츠(own-content) 설정이 더 깔끔할 것이라고 생각합니다. 이는 기존 안전장치에 따라 사용자가 자신의 게시물/토픽을 삭제하거나 철회할 수 있도록 허용하되, 다른 사용자의 콘텐츠나 삭제된 콘텐츠 가시성에 대해 더 넓은 모더레이션 권한을 부여하지는 않을 수 있습니다.

원하는 UI 동작을 명확히 하기 위해 말씀드리자면, 삭제된 콘텐츠가 일반 사용자에게 보이도록 해달라는 것이 아닙니다.

본인 콘텐츠 삭제 권한에 관해 이상적인 동작은 뷰어(사용자)별로 다르게 적용되는 방식이어야 합니다:

  • 작성자는 자신의 게시물이 철회/삭제되었음을 확인할 수 있어야 합니다. 예를 들어 일반적인 빨간색 삭제 게시물 스타일이나 접힌 상태로 표시되어, 무슨 일이 있었는지 이해하고 복구 허용 시 복구가 가능하도록 해야 합니다.
  • 스태프/모더레이터는 적절한 감사 및 관리 권한에 따라 삭제된 콘텐츠에 대한 가시성을 유지해야 합니다.
  • 일반 사용자는 삭제된 콘텐츠에 대한 흔적을 전혀 볼 수 없어야 합니다. 게시물 본문, 수정 이력, 그리고 이상적으로는 삭제 게시물 플레이스홀더조차 보이지 않아야 합니다.

따라서 제가 요구하는 구별은, 비(非)스태프 사용자에게 삭제된 콘텐츠에 대한 가시성을 주거나 다른 사용자의 게시물/토픽에 대한 전역 권한을 부여하지 않으면서도, 작성자가 자신의 가시적인 흔적에 대한 통제를 가질 수 있도록 하는 것입니다.

한 가지 더 추가할 뉘앙스는 수정 이력(revision history)입니다.

PostRevisor를 살펴보면, 수정 이력은 PostRevision을 통해 별도로 저장되므로, 자신의 콘텐츠 삭제 권한이 반드시 수정 기록을 물리적으로 삭제하거나 감사 가능성을 제거해야 한다는 것을 의미하지는 않습니다.

제가 상상하는 권한은 더 일반적이며 사용자 대면 가시성과 관련이 있습니다. 즉, 작성자가 자신의 게시글/토픽을 철회할 수 있는지, 삭제된 게시글의 플레이스홀더가 남아있는지, 일반 사용자가 이전 수정 내용을 볼 수 있는지, 그리고 스태프/모더레이터가 적절한 감사/모더레이션 접근 권한(예: “VIEW N HIDDEN REPLY”)을 유지하는지에 대한 것입니다.

따라서 제가 요청하는 구분은 다음과 같지 않습니다:

  • “사용자가 데이터베이스에서 모든 흔적을 지울 수 있게 하는 것”

대신 다음과 같은 것입니다:

  • “사용자가 자신의 가시적인 콘텐츠/발자취에 대해 더 많은 제어권을 가질 수 있게 하는 것”
  • 다른 사용자의 콘텐츠를 삭제하거나 삭제된 콘텐츠를 일반적으로 볼 수 있는 전역 권한을 부여하지 않으면서도.