0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Laravel不思議エラー】ポリシーに違反していないのに403

Last updated at Posted at 2023-04-18

:warning: どういうパターン?

ユーザの権限などがあり、ルートモデルバインディングでバインドされたモデルにアクセスする権限があるかどうかを確認するポリシーが存在するとき、
ポリシーに違反していない(アクセス権限がある)はずなのに、403エラーが発生する、みたいなパターン。

:white_check_mark: 解決方法

ルートモデルバインディングしているモデルを、例え使わないとしても受け取ってください。

class StoreController extends Controller
{
    public function index(Store $store): View
    {
        return view('user.store.index');
    }
}

サンプルコード

/stores/{store}には、ログイン中のユーザと店舗に関連が無いとアクセスできないようにポリシーを設定します。

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        Store::class => StorePolicy::class,
    ];
    
    // ...
}
class StorePolicy
{
    use HandlesAuthorization;

    public function view(User $user, Store $store)
    {
        return $user->stores->where('id', $store->id)->isNotEmpty();
    }

    // ...
}
Route::middleware(['can:view,store'])->group(function () {
    Route::get('/stores/{store}', StoreController::class . '@index')->name('stores.index');
}

このような場合に、とりあえずviewの表示だけしよう!などという考えでこのように書くと、403になってしまいます。

class StoreController extends Controller
{
    public function index(): View
    {
        return view('user.store.index');
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?