다양한 장애물 없이 실제로 영구 삭제하기

게시물/토픽을 실제로 삭제할 수 있는 옵션이 있으면 좋겠습니다. 매번 삭제할 때마다 이런 식으로 막히니까 오히려 더 불편하거든요.

이 부분은 그냥 "이런 결과가 생길 수 있다는 걸 알고도 삭제하고 싶다"는 확인 체크박스 하나만 있으면 됩니다. 초장문 토픽에서 모든 게시물을 하나하나 수동으로 삭제해야 하는 상황을 강요하지 말아 주세요.

아니면 Reddit처럼 첫 번째 게시물만 실제로 삭제해서 비워둘 수 있으면 좋겠습니다.

"하지만 다른 사용자나 후세를 위해 답변이 중요할 수 있다"고 말하는 사람들이 많을 거라는 건 알겠어요. 하지만 그게 얼마나 중요하지 않은지 강조하고 싶고, 모든 답변이 삭제되는 건 전혀 신경 쓰지 않습니다.

그리고 이걸 모든 게시물에 대해 반복해서 해야 하는 것도 안 됩니다.

3개의 좋아요

기존 동작을 기본값으로 유지하면서, 이를 열거형(enum) 사이트 설정으로 구현하는 것이 잘 작동할 수 있다고 생각합니다. 예를 들어, permanent_topic_deletion_mode 설정에서 현재와 같은 “각 게시물을 먼저 영구 삭제해야 함” 동작과, 선택적으로 “토픽과 모든 게시물을 영구 삭제” 동작을 제공할 수 있으며, 기존과 동일한 유형화된 확인 단계를 거치도록 할 수 있습니다. 이를 통해 기존 사이트의 현재 안전 정책을 유지하면서, 일괄 삭제를 명시적으로 원하는 관리자가 해당 기능을 선택적으로 사용할 수 있게 됩니다.

기존의 영구 삭제 코드를 파고든 후 빠른 진행 상황 업데이트를 드립니다.

Discourse에는 이미 여기에 필요한 실제 일괄 삭제 동작이 존재한다는 것을 발견했습니다. 첫 번째 게시물이 영구적으로 삭제되면, PostDestroyer가 이미 해당 주제의 나머지 게시물들을 재귀적으로 영구 삭제할 수 있습니다. 제한 사항은 주로 권한/정책 검사에 있으며, 현재는 다른 게시물들이 먼저 영구 삭제되어야 하는 것을 요구합니다.

따라서 위에서 제안했던 사이트 전체 범위의 enum 방식에서 벗어나, 더 보수적인 옵트인(opt-in) 모델을 사용한 작동 가능한 구현체를 만들었습니다.

  • 기존 can_permanently_delete 설정은 여전히 마스터 스위치 역할을 합니다.
  • 기본적으로 비활성화된 추가적인 숨겨진 운영자 수준의 게이트가 있습니다.
  • 둘 다 활성화되면, 각 관리자는 설정 → 인터페이스에서 개별적으로 옵트인할 수 있습니다.
  • 한 관리자가 옵트인하더라도 다른 관리자의 동작은 변경되지 않습니다.
  • 숨겨진 게이트를 비활성화하면 기존 동작이 즉시 전역적으로 복원됩니다.
  • 기존 영구 삭제 확인 및 기타 안전장치는 그대로 유지됩니다.

현재 해당 설정은 다음과 같이 표시되어 있습니다:

주제를 영구 삭제할 때 모든 게시물을 삭제하도록 허용

그리고 설명은 다음과 같습니다:

주제를 영구 삭제할 때, 개별적으로 영구 삭제하는 것을 요구하지 않고 나머지 모든 게시물을 함께 영구 삭제합니다.

백엔드 정책/보안 테스트, 주제와 모든 나머지 게시물이 실제로 영구적으로 제거되었음을 확인하는 컨트롤러 커버리지, 직렬화기/API 커버리지, 그리고 설정의 표시 및 저장을 위한 프론트엔드 인수 테스트를 추가했습니다. 현재 모두 통과하고 있습니다.

또한, 더 파괴적인 삭제 모드를 활성화하는 것은 타임스탬프가 있는 감사 이벤트로 기록할 가치가 있다고 생각하여, 이 관리자별 옵트인에 대한 변경 사항을 스태프 액션 로그(Staff Action Logs)에 기록하는 방안도 검토하고 있습니다.

해당 작업과 최종 검토를 마치는 대로 GitHub PR을 게시하겠습니다.

최종 업데이트: 구현이 이제 검토를 위한 PR으로 업로드되었습니다:

최종 설계는 이전에 제안했던 사이트 전체 범위의 열거형(enum)이 아니라, 위에서 설명한 대로 관리자별 옵트인(opt-in) 방식입니다.

최종 점검 과정에서 몇 가지 UX 세부 사항이 추가되었습니다:

  • 사이트 수준의 게이트가 허용하는 경우, 관리자별 설정은 설정 → 인터페이스 메뉴 아래에 표시됩니다.
  • 옵트인한 관리자가 첫 번째 게시물/토픽을 영구 삭제할 때, 되돌릴 수 없는 확인 메시지에 토픽과 모든 답변이 영구 삭제됨이 명시적으로 표시됩니다.
  • 관리자가 옵트인하지 않은 경우, 기존 동작과 문구는 변경되지 않습니다.
  • 기존 동일 관리자 대상 영구 삭제 쿨다운(시간 제한)이 여전히 적용됩니다.
  • 설정 변경 사항은 직원 작업 로그(Staff Action Logs)에 기록됩니다.

저는 또한 2개의 답변이 있는 일회용 토픽에서 옵트인된 전체 경로를 수동으로 테스트하고, 이후 데이터베이스에서 해당 토픽과 모든 게시물이 삭제되었는지 확인했습니다.

주요 GitHub 테스트/린트 체크는 통과했으며, 이 글 작성 시점에는 보안 스캔이 대기 중이므로 PR은 현재 검토를 기다리고 있습니다.

1개의 좋아요