영구 삭제 버그

영구 삭제 기능에 버그가 있는 것 같습니다.

게시글 몇 개를 삭제했는데, 이제 삭제된 게시글 목록을 열 수 없습니다.

여기서 확인하실 수 있듯이 여전히 삭제된 게시글이 342개 있습니다. 하지만 클릭하면 404 페이지로 이동합니다.

다른 사용자의 삭제 목록은 열 수 있지만, 제 목록은 열 수 없습니다.

이를 수정할 수 있는 방법이 있을까요?

3개의 좋아요

자, 버그를 재현하는 단계를 파악한 것 같습니다.

계정이 두 개인지 여부는 확실하지 않지만, 제 상황은 다음과 같습니다:

  1. 계정 A가 주제를 생성한 후, 해당 주제를 고정하고 닫습니다.
  2. 계정 A가 해당 주제를 소프트 삭제합니다.
  3. 5분을 기다린 후 계정 B로 로그인하고, 계정 A의 삭제 목록(예: www.example.com/u/username/deleted-posts)을 엽니다.
  4. 계정 A가 방금 소프트 삭제한 게시물을 찾아서 엽니다.
  5. 게시물을 영구 삭제하려고 하면 '다른 게시물이 있으므로 게시물을 삭제할 수 없습니다’라는 오류 메시지가 표시됩니다.
  6. 게시물 아래에 있는 주제 고정 및 닫기 메시지를 삭제한 후, 다시 영구 삭제를 시도해야 합니다.
  7. 삭제가 성공하지만, 이제 계정 A의 삭제 목록을 더 이상 열 수 없습니다.
3개의 좋아요

누군가 이 부분을 한번 봐주실 수 있을까요?

민감한 정보가 포함된 게시글들을 정리하고 있었는데, 지금은 막혀버린 상태입니다…

3개의 좋아요

삭제된 게시물을 해당 주제/개인 메시지에서 여전히 접근할 수 있고, 거기서 영구적으로 삭제할 수 있는 건가요, 아니면 삭제한 게시물을 더 이상 볼 수 없는 건가요?

2개의 좋아요

포스트에서 이들을 접근할 수 있습니다.

하지만 어떤 포스트인지 알 수 없으므로, 삭제된 포스트 목록이 매우 중요합니다.

이 목록이 없으면 모든 개인 메시지와 공개 주제를 수동으로 확인해야 합니다.

2개의 좋아요

deleted-posts.json도 시도해 보았지만, 해당 정보에는 삭제된 게시물이 포함되어 있지 않았습니다.

"user_badges"와 같은 기타 사용자 정보만 표시됩니다.

2개의 좋아요

어떤 방식으로든 삭제된 게시물의 ID 목록을 얻을 수 있다면 도움이 될 것입니다.

2개의 좋아요

재현(repro)을 시도해 보고 있습니다:

  • 관리자 A가 새 주제를 생성하고, 전역으로 고정(영구)한 다음, 주제를 닫습니다
  • 관리자 A가 해당 주제를 소프트 삭제(soft-delete)합니다

  • 관리자 B가 관리자 A의 프로필에서 /deleted-posts 목록에 접근하여 해당 주제를 찾습니다
  • 관리자 B가 주제를 영구 삭제하려고 시도하지만, "다른 게시물이 있으므로 이 주제를 영구 삭제할 수 없습니다."라는 오류가 발생합니다
  • 관리자 B가 ‘고정’ 및 ‘닫기’ 소형 액션 게시물을 삭제합니다
  • 관리자 B가 영구 삭제를 다시 시도합니다 - 삭제가 성공적으로 수행됩니다

  • 그러나 이제 관리자 B는 GET https://greedy.jammydodger.monster/posts/jammydodger/deleted?offset=0 오류와 함께 관리자 A의 /deleted-posts에 접근할 수 없습니다

관리자 A와 관리자 C는 여전히 관리자 A의 /deleted-posts 목록에 접근할 수 있습니다. 단기적으로, @VincentAlse님, 다른 관리자 계정을 사용하여 /deleted-posts 목록에 접근하고 삭제하려는 다른 게시물을 찾을 수 있을까요? 아니면 data-explorer 쿼리를 사용하여 해당 게시물을 식별할 수도 있습니다?

3개의 좋아요

안녕하세요 @JammyDodger

확인해 주셔서 감사합니다. 방금 Admin C를 (기존 계정과 새로 만든 계정 모두로) 시도해 보았지만 제 환경에서는 작동하지 않습니다. 여러 다른 계정의 게시물을 삭제하면서 대부분의 계정에서 삭제 목록 기능이 버그를 일으킨 것 같습니다.

data-explorer를 살펴보겠습니다. 이 도구로 삭제된 게시물을 조회할 수 있을까요?

2개의 좋아요

아, 그건 좀 불행하네요. 데이터 탐색기 플러그인에 접근 권한이 있다면, 아래와 같은 쿼리를 사용하면 특정 사용자의 /deleted/posts 목록을 재현할 수 있을 것 같습니다 (확실히 하기 위해 post_id도 포함했습니다):

-- [params]
-- user_id :user_id

SELECT p.created_at AS reltime$time,
       id AS post_id,
       id
FROM posts p
WHERE p.user_id = :user_id
AND p.deleted_at IS NOT NULL
ORDER BY p.created_at DESC
4개의 좋아요

한 번 해볼게요.

3개의 좋아요

@VincentAlse 님, 그렇게 하니까 잘 되셨나요? 그 방법으로 원하시는 목록이 나오지 않았다면, 삭제하려는 게시물을 찾을 수 있는 방법이 여러 가지가 있어야 한다고 생각합니다.

3개의 좋아요

어리석은 질문입니다. user_id가 무엇인가요? .json 페이지를 보면 제 user_id가 1인 것 같습니다.

다음과 같은 메시지를 받고 있습니다: ActiveRecord::PreparedStatementInvalid: missing value for :user_id in /*

@JammyDodger

1개의 좋아요

그 스크린샷을 보면 상단의 파라미터를 수정하셨는데, 이렇게 하면 실제로 작동이 멈추게 됩니다. :user_id로 그대로 두면 실행 시 사용자 이름을 입력할 수 있는 선택 상자가 표시됩니다. :+1:

또는 파라미터를 제거하고 json에서 가져온 사용자 ID를 WHERE p.user_id = 줄에 추가하는 방법도 있습니다.

이해가 되시나요?

3개의 좋아요

이미 도움을 받고 있는 것 같지만, 클릭하면 /u/deleted-posts로 이동하며, 이는 정상적으로 작동합니다.

1개의 좋아요

이제 작동합니다!

user_id를 코드에 넣어야 한다고 생각했거든요.

@JammyDodger 감사합니다.

4개의 좋아요

어제 이 PR로 보고해 주신 버그를 수정했습니다. 해당 PR은 이미 병합되었으며, Discourse 인스턴스를 업데이트하시면 배포할 수 있습니다:

하지만 주제를 하드 삭제하면 데이터베이스에 고아된 small actions 게시물이 남을 수 있다는 사실을 발견했습니다. 이 두 번째 버그는 다음 PR로 수정되었습니다:

이제 모든 것이 정상적으로 작동할 것입니다. 더 문제가 있으면 알려주세요.

6개의 좋아요

이 주제는 3일 후 자동으로 닫혔습니다. 더 이상 새 답변을 남길 수 없습니다.