認可とはどんな概念でしょうか。
認可とは、特定の行動に対しての権限の制御をする設定です。
認可には、Gate・Policy、2つの方法があります。
Gateで設定する場合
・App\Providers\ AuthServiceProvider に定義を記述
・認可したい箇所でGateファザードを用いて制御
Gateを App\Providers\ AuthServiceProvider で定義する
public function boot()の中で定義していきます。
Gateの名称を設定:chat-view
Gateが認可される条件を設定:if文の中がtrueの場合に返り値として return true;を返します。
※引数$userは、認証されているユーザー情報が入ってきます。
Gate::define('chat-view', function (User $user, $chatRoom) { if ($chatRoom->apply_user_id === $user->id) { return true; } });
認可したい箇所でGateファザードを用いて制御
Gateを活用する場所では、下記のように扱います。
Gateファザードには、denies, allows , authorizeなどのメソッドがあります。
authorize で設定している下記では、Gateの定義した処理でtrueを返さない場合には403エラーを返します。
$chatRoom = ChatRoom::findOrFail($chatRoomId); Gate::authorize('chat-view', $chatRoom);