学んだこと/推測したことは以下の通りです。
Guardianはまさに 「ユーザーは何を許可されているか?」 をカプセル化するものです。(GuardianインスタンスはUserインスタンスも保持します。)- したがって、権限述語の適切な場所は、単に
Guardianのメソッド(lib/guardian.rb)にあります。- メソッドが「ユーザーは Xxxx オブジェクトに対して Z を実行できますか?」というものである場合、それはおそらく
XxxxGuardianミキシンファイル(lib/guardian/...)のいずれかに属します。 - それ以外の場合は、基本の
Guardian定義に入ります。
- メソッドが「ユーザーは Xxxx オブジェクトに対して Z を実行できますか?」というものである場合、それはおそらく
ApplicationControllerは現在のリクエスト/クライアントを反映するguardian属性を管理し、シリアライザーにスコープとして提供するため、必要に応じて現在のGuardianが利用可能になります(利用できない場合を除く[1])。Guardianがすぐに利用できない場所があります。通常はシステムによって実行されるバックエンドタスクですが、「アクティブなユーザー」(例:メール通知の生成時に受信者ユーザー)のハンドルがあれば、適切なガーディアンをその場で作成できます:Guardian.new(the_user)。