あるControllerを継承した別のControllerで
<?php $this->authorizeResource(Order::class, 'order');
したら、Policyがスルーされてしまった。
authorizeResource()の引数は何に使われるのか?
第一引数から、Policyが設定される。上の場合だと、OrderPolicyになる。
第二引数からは、Routeから得られるパラメータを指定してる…らしい。order/show/{order}のやつね。多分。
Policyのメソッドは何が使われるのか?
単純にPOSTメソッドの場合はController::storeメソッドで、Policy::create()なんじゃないの?と思っていたが、
<?php public function create(User $user) {
だと、コールされなかった。
なぜなら、$userがnullだったから。未ログインユーザーの場合はここに到達できず、ということはメソッド自体が無くUnauthorizeとなる。
ということで、$userがnullの場合の解決法
<?php public function create(User $user = null) {
とする。
これでnullの場合もこのPolicyのcreate()が使われる。
しかしまぁ、
結局、Controllerのメソッドで
<?php public function store(Request $request){ $this->authorize('create_other', Preorder::class);
と明示的に指定してPolicyにcreate_otherメソッドを生やして対応した方が筋はいいのかな。