허용된 미디어 그룹에 속하지 않은 사용자가 게시물을 생성한 후, 해당 게시물이 플래그를 통해 숨겨진 경우, 관리자가 숨겨진 게시물을 편집하여 미디어를 추가한 뒤 게시물을 숨김 해제하려고 하면 다음과 같은 오류가 발생합니다:
ActiveRecord::RecordInvalid
Validation failed: Sorry, you can't embed media items in a post.
숨김 해제 과정에서 미디어 유효성 검사가 관리자의 권한이 아니라 원래 작성자의 권한을 기준으로 다시 실행되어, 숨김 해제가 실패합니다.
재현 방법
임베디드 미디어 게시물 허용 그룹을 설정하고, 낮은 신뢰도의 사용자를 제외합니다.
허용된 그룹에 포함되지 않은 사용자로 게시물을 생성합니다.
시스템 플래그를 통해 게시물이 숨겨지도록 합니다. (여기에 대해 완전히 확신은 없습니다 — 게시물은 플래그를 통해서만 숨겨지고, 스태프가 수동으로 숨길 수는 없는 것 같습니다? 스태프는 주제는 숨길 수 있지만 개별 게시물은 숨길 수 없습니다. 제가 틀렸다면 지적해 주세요.)
관리자가 숨겨진 게시물을 편집하여 미디어(이미지/비디오)를 삽입합니다.
게시물을 숨김 해제하려고 합니다. (UI를 통해 또는 Rails 콘솔에서 post.unhide!를 호출하여)
다음과 같은 오류와 함께 작업이 실패합니다:
ActiveRecord::RecordInvalid Validation failed: Sorry, you can't embed media items in a post.
저는 이것이 안전하다고 생각합니다. 특히 검증(validation)을 여전히 기대하는 호출부(callsite)인 PostRevisor#remove_flags_and_unhide_post가 있기 때문입니다. 따라서 추가된 파라미터를 통해 조금 더 안전성을 확보할 수 있습니다.