Laravel学習記録 #037 Gateを学ぶ
LaravelのGateについて学習したものをまとめています。
Gateとは
認証済みユーザー権限など認可を判定する機能
App\Providers\AuthServiceProviderで定義される
Gateファサードを使用してAuthServiceProviderのbootメソッド内で定義
Gateを試してみる
Gate定義
認可タイプとして、roleが1,2の場合ならOKのものと3であればOKの2タイプ定義してみます。
defineメソッドの第一引数にGateの名前、第二引数にクロージャを取ります。
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
// Gateの定義
Gate::define('role-typeA', function ($user) {
return in_array($user->role, [1, 2]);
});
Gate::define('role-typeB', function ($user) {
return $user->role == 3;
});
}
}
呼び出す
使用する場合以下のようにallowsメソッドで使用できます。
第一引数に定義した名前を指定して利用します。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
class ExampleController extends Controller
{
public function handleRequest(Request $request)
{
// role-1-2のアビリティをチェック
if (Gate::allows('role-typeA')) {
// 1, 2の権限を持つユーザー向けの処理
return response()->json(['message' => '権限が1or2']);
}
// role-3のアビリティをチェック
if (Gate::allows('role-typeB')) {
// 3の権限を持つユーザー向けの処理
return response()->json(['message' => '権限が3']);
}
// 権限がない場合の処理
return response()->json(['message' => '許可されていません'], 403);
}
}
この記事が気に入ったらサポートをしてみませんか?