【Laravel】Gateとは

【Laravel】Gateとは

参加しているLaravelのプロジェクトでGateというものを扱うタイミングがあった。
それの忘備録です。

Gateとは

Laravelは特定のリソースに対するユーザーアクションを認可する手軽な方法を提供している

  • 組み込み認証サービス
  • 認証されているユーザーでもDBのレコードの更新や削除ができない

Laravelが提供しているアクションを認可する2つの具体例が次

  • Gate
  • Policy

これらはRoutesやControllerのようなもの、と考えてok

Gate

クロージャーベースのシンプルなアプローチを提供する

Policy

Controllerの様に特定のModelやリソース周辺のロジックをひと塊にまとめる

今回は「Gate」についてまとめる

Gate

Gateは、ユーザーが特定のアクションを実行することを許可されているかどうかを判断する単なるクロージャーである。

  • 通常、GateはGate Facadesを使用してApp\Providers\AuthServiceProviderクラスのbootメソッド内で定義される
  • Gateは常に最初の引数としてユーザーインスタンスを受け取る
  • オプションで関連するEloquentモデルなど追加の引数を受け取れる

Gateを使った例

上記の例では、ユーザーが特定のApp\Models\Postモデルを更新できるかどうかを判断するGateを定義した。ユーザーのidとPostを作成したuser_idを比較している。

アクションの認可

Gateを使用してアクションを認可するにはGate Facadesが提供するallowsかdeniesメソッドを使う必要がある。すでに認証済みのユーザーをこれらのメソッドに渡す必要はない。Laravelは自動的にユーザーをGateクロージャーに渡す。一般的には、認可が必要なアクションを実行する前に、アプリケーションのController内でGate認可メソッドを呼び出す。

この様にLaravelのGateを使えば、そのユーザーに対してアクションを制限することができる。