0
0

【Laravel】ログイン済みの特定ユーザーのみが閲覧できるページの作成方法

Posted at

概要

  • 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の処理を書く
});
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0