やりたい事
web.phpの以下のコードででログインしていないアカウントを弾いてくれる。
->middleware('auth')
同じようにルーティング時点で管理者以外も弾きたい。
userテーブルにis_adminを追加
マイグレーション
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->boolean('is_admin')->after('remember_token')->nullable()->comment('管理者');
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('is_admin');
});
}
};
middleware作成
php artisan make:middleware AdminOnly
app/Http/Middleware/AdminOnly.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use App\Models\User;
class AdminOnly
{
public function handle(Request $request, Closure $next): Response
{
$is_admin = auth()->user()->is_admin;
if($is_admin != 1){
return redirect()->route('top');
}
return $next($request);
}
}
Kernelに追加
app/Http/Kernel.php
protected $routeMiddleware = [
'adminOnly' => \App\Http\Middleware\AdminOnly::class,
];
やりたい事
これでis_adminフラグが立ってないユーザーを弾いてくれます。
web.php
->middleware(['auth', 'adminOnly'])