기존 동작을 기본값으로 유지하면서, 이를 열거형(enum) 사이트 설정으로 구현하는 것이 잘 작동할 수 있다고 생각합니다. 예를 들어, permanent_topic_deletion_mode 설정에서 현재와 같은 “각 게시물을 먼저 영구 삭제해야 함” 동작과, 선택적으로 “토픽과 모든 게시물을 영구 삭제” 동작을 제공할 수 있으며, 기존과 동일한 유형화된 확인 단계를 거치도록 할 수 있습니다. 이를 통해 기존 사이트의 현재 안전 정책을 유지하면서, 일괄 삭제를 명시적으로 원하는 관리자가 해당 기능을 선택적으로 사용할 수 있게 됩니다.
Discourse에는 이미 여기에 필요한 실제 일괄 삭제 동작이 존재한다는 것을 발견했습니다. 첫 번째 게시물이 영구적으로 삭제되면, PostDestroyer가 이미 해당 주제의 나머지 게시물들을 재귀적으로 영구 삭제할 수 있습니다. 제한 사항은 주로 권한/정책 검사에 있으며, 현재는 다른 게시물들이 먼저 영구 삭제되어야 하는 것을 요구합니다.
따라서 위에서 제안했던 사이트 전체 범위의 enum 방식에서 벗어나, 더 보수적인 옵트인(opt-in) 모델을 사용한 작동 가능한 구현체를 만들었습니다.
기존 can_permanently_delete 설정은 여전히 마스터 스위치 역할을 합니다.
기본적으로 비활성화된 추가적인 숨겨진 운영자 수준의 게이트가 있습니다.
둘 다 활성화되면, 각 관리자는 설정 → 인터페이스에서 개별적으로 옵트인할 수 있습니다.
한 관리자가 옵트인하더라도 다른 관리자의 동작은 변경되지 않습니다.
숨겨진 게이트를 비활성화하면 기존 동작이 즉시 전역적으로 복원됩니다.
기존 영구 삭제 확인 및 기타 안전장치는 그대로 유지됩니다.
현재 해당 설정은 다음과 같이 표시되어 있습니다:
주제를 영구 삭제할 때 모든 게시물을 삭제하도록 허용
그리고 설명은 다음과 같습니다:
주제를 영구 삭제할 때, 개별적으로 영구 삭제하는 것을 요구하지 않고 나머지 모든 게시물을 함께 영구 삭제합니다.
백엔드 정책/보안 테스트, 주제와 모든 나머지 게시물이 실제로 영구적으로 제거되었음을 확인하는 컨트롤러 커버리지, 직렬화기/API 커버리지, 그리고 설정의 표시 및 저장을 위한 프론트엔드 인수 테스트를 추가했습니다. 현재 모두 통과하고 있습니다.
또한, 더 파괴적인 삭제 모드를 활성화하는 것은 타임스탬프가 있는 감사 이벤트로 기록할 가치가 있다고 생각하여, 이 관리자별 옵트인에 대한 변경 사항을 스태프 액션 로그(Staff Action Logs)에 기록하는 방안도 검토하고 있습니다.