권한 프리디케이트를 제안할 적절한 곳은 어디인가요?

내가 파악/추론한 내용은 다음과 같습니다:

  • Guardian은 _“사용자가 무엇을 할 수 있는가?”_를 캡슐화하는 것이 맞습니다. (Guardian 인스턴스에는 User 인스턴스도 포함됩니다.)
  • 따라서 권한 판정식(predicate)을 두는 적절한 위치는 단순히 Guardian의 메서드(lib/guardian.rb)입니다.
    • 해당 메서드가 "사용자가 특정 Xxxx 객체에 대해 Z 작업을 수행할 수 있는가?"를 묻는 것이라면, XxxxGuardian 믹스인 파일(lib/guardian/...) 중 하나에 속할 가능성이 높습니다.
    • 그렇지 않다면, 기본 Guardian 정의에 넣어야 합니다.
  • ApplicationController는 현재 요청/클라이언트를 반영하는 guardian 속성을 관리하며, 이를 시리얼라이저(serializer)의 scope로 제공합니다. 덕분에 필요할 때 현재 Guardian을 사용할 수 있습니다([1]가 아닌 경우를 제외하고).
  • 시스템이 실행하는 백엔드 태스크와 같이 미리 만들어진 Guardian이 사용 불가능한 경우가 있습니다. 하지만 “행동하는 사용자(acting user)”(예: 이메일 알림을 생성할 때의 수신자)에 대한 참조를 가지고 있다면, 즉석에서 적절한 가디언을 생성할 수 있습니다: Guardian.new(the_user).

  1. ↩︎