채팅 업로드 버그

이 문제를 파헤치느라 시간이 좀 걸렸지만, 원인을 찾은 것 같습니다. 아마도 이 코드와 관련이 있을 것 같습니다:

def fetch_uploads(params:, guardian:)
  return [] if !SiteSetting.chat_allow_uploads
  guardian.user.uploads.where(id: params.upload_ids) # 특히 여기
end

새로운 채팅 메시지가 생성될 때 이 메서드가 호출되어 메시지에 첨부할 업로드를 가져옵니다. 소유권을 보장하기 위해 Guardian의 user를 통해 업로드를 가져오도록 하여 해당 사용자 소유의 업로드만 허용하는 것 같습니다.

문제는 업로드가 중복 제거(deduplication)된다는 점입니다. 여기에서 확인할 수 있습니다:

# do we already have that upload?
@upload = Upload.find_by(sha1: sha1)

# ...

# return the previous upload if any
if @upload
  add_metadata!
  UserUpload.find_or_create_by!(user_id: user_id, upload_id: @upload.id) if user_id
  return @upload
end

제 생각에는 사용자의 업로드만 고려하는 대신 UserUpload를 통해 처리하는 것이 가능한 해결책이 될 수 있습니다. UserUpload는 업로드를 여러 사용자와 연결하므로, 이것이 우리가 필요한 것 같습니다. 아직 100% 확실하지는 않지만, 시간이 늦어지므로 이제 잠자리에 들겠습니다. 다른 사람이 해결하지 않는다면 나중에 돌아와서 PR을 작업해 보겠습니다. :slightly_smiling_face:

3개의 좋아요