Laravelを知らない人の適当な回答は迷惑すぎる。
Laravelでは「認可」機能を使う。「認証」と「認可」は別なのでしっかり理解が必要。
https://laravel.com/docs/11.x/authorization
AppServiceProvider@bootで定義。
php
1namespace App\Providers;
2
3use App\Models\User;
4use Illuminate\Support\Facades\Gate;
5use Illuminate\Support\ServiceProvider;
6
7class AppServiceProvider extends ServiceProvider
8{
9 public function boot(): void
10 {
11 Gate::define('admin', function (User $user) {
12 return in_array($user->email, [
13 'admin@example.com',
14 ]);
15 });
16 }
17}
ここので$user
は認証済みなのでログインしてるかどうかは気にしなくていい。
認証済みユーザーのメールアドレスが条件を満たしていたらadmin権限を持つ、として扱う。
クロージャの中身は自由なのでメールアドレス以外でもなんでもいい。管理者を特定できればいい。
ログインしてるかどうかの確認が認証。
認証済みユーザーに対してさらに細かい権限を確認するのが認可。
認可を定義したらroutes/web.phpで使用。これで/admin
ページは管理者以外は表示できない。
php
1Route::get('admin', AdminController::class)
2 ->can('admin');
もう少し現実的にgroupなら。/admin/*
以下は管理者しか表示できない。
php
1Route::prefix('admin')->group(function () {
2 Route::get('/', DashboardController::class);
3 Route::get('users', UserController::class);
4})->can('admin');
認可はbladeでも使えるので管理者のみ管理画面へのリンクを表示とかもできる。
php
1@can('admin')
2<a href="{{ route('admin.dashboard') }}">管理画面</a>
3@endcan
Laravel公式パッケージを見れば同じことしてると分かる。
https://laravel.com/docs/11.x/pulse#dashboard-authorization
Laravelには認可機能が標準で用意されてるので一般ユーザーと管理者を分けるようなマルチ認証は不要。
日本にはLaravelをまともに使える人が少ないのでこんなちょっとした管理者権限のためにマルチ認証を使う100%間違った情報が広まってしまっている。
海外ではマルチ認証の使い方の質問に対して「マルチ認証は使うな」という回答が必ず付くほど「Laravelでマルチ認証は絶対に使うな」が常識。
日本だけがおかしいので「認可」が出てこない日本語の情報はすべて無視したほうがいい。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。