🔒
Laravel の Policy で User 以外も使いたいときは第 2 引数を配列にして追加する
状況
Policy にユーザ以外の情報を渡したい.
問題
元々のコード
public function viewAny(User $user)
{
//
}
こうしたい
public function viewAny(User $user, Hoge $hoge)
{
//
}
Policy のコードを変更しただけでは,コントローラでうまくデータが渡らず Policy が適用されない.
User は自動で認証ユーザの値を取得するため引数に含める必要はないが,Hoge を入力する方法がよくわからない(ドキュメントには第 2 引数に入れろと書いてある).
// これはNG
$this->authorize('viewAny', Hoge::class);
// これもNG
$this->authorize('viewAny', $hoge);
// これもNG
$this->authorize('viewAny', $hoge, Hoge::class);
// これもNG
$this->authorize('viewAny', Hoge::class, $hoge);
解決策
こうする.
$this->authorize('viewAny', [Hoge::class, $hoge]);
まとめ
Policy に引数追加する場合は第 2 引数を配列にして追加する.
以上だ( `・ω・)b
Discussion