概要
- adminユーザーとデフォルトユーザーでテーブルを分けるのではなく、1つのユーザーテーブルのみを作成
- それぞれのユーザーが持つ
admin_id
の値で権限をチェックして、ログイン済み、且つadmin権限を持つユーザーのみが閲覧できるページを作成
前提
- Laravel Breezeがインストール済
-
admin_id
カラムを持つUserテーブルを作成-
admin_id
が1の場合、adminユーザー -
admin_id
が1以外の場合、デフォルトユーザー
-
環境
- Laravel Sailでの環境構築
- Laravel 10.30.1
- PHP 8.2.12
- Laravel Breeze
実際の記述
app/Models/User.php
// 既存ファイルに以下を追記
public function isAdmin(): bool
{
return $this->role_id === 1;
}
app/Http/Middleware/CheckRole.php
// ファイルを新規作成して、以下を記載
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class CheckRole
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (auth()->check() && $request->user()->isAdmin()) {
return $next($request);
}
return abort(403, 'Unauthorized');
}
}
app/Http/Kernel.php
protected $middlewareAliases = [
// 既存ファイルに以下を追記
'checkRole' => \App\Http\Middleware\CheckRole::class,
];
routes/auth.php
// 既存ファイルに以下を追記
Route::middleware(['auth', 'checkRole'])->group(function () {
// ここにadmin権限を持つユーザーのみが閲覧できるRouteの処理を書く
});