LaravelでGateが使えないとき

ECサイトにて、

  • ユーザー:usersテーブル
    • フロント画面
      • guardの定義:web
  • 管理者:adminテーブル
    • 管理画面
      • guardの定義:admin

といった感じに利用者・画面を分けている。

管理画面内にて、Gate::defineを記載したが、この中のロジックを通過してくれなかった。

Gateはdefaultのguardを参照するのだが、
(変更してなければ)defaultのguardがweb(user)となっているため、
adminをdefaultのguardにしてあげる必要がある。

Auth::shouldUse('admin')

とするとdefaultのguardが上書きされ、管理画面でのGateが使えるようになる