본문 바로가기

IT & 개발/laravel

Laravel에서 Custom Role Middleware 만들기

반응형

Laravel에서 사용자 권한(Role)에 따라 접근을 제한하려면 기본적인 인증 미들웨어 외에 추가적인 Role 미들웨어를 구현해야 합니다. 이번 글에서는 Custom Role Middleware를 생성하고 적용하는 방법을 단계별로 설명하겠습니다.


1. Middleware 생성

먼저 터미널에서 아래 명령어를 실행하여 RoleMiddleware를 생성합니다.

php artisan make:middleware RoleMiddleware

이 명령을 실행하면 app/Http/Middleware/RoleMiddleware.php 파일이 생성됩니다.


2. Role Middleware 구현

app/Http/Middleware/RoleMiddleware.php 파일을 열고 아래와 같이 수정합니다.

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Auth;

class RoleMiddleware
{
    public function handle(Request $request, Closure $next, $roles): Response
    {
        // 여러 역할을 지원하기 위해 문자열을 배열로 변환
        $roleList = explode('|', $roles);

        // 현재 사용자의 역할을 가져오는 메서드 (예제 코드에서는 authRole()을 가정)
        if (Auth::check() && in_array(authRole(), $roleList)) {
            return $next($request);
        }

        return redirect()->route('login');
    }
}

위 코드에서는 $roles| 기호로 구분하여 여러 역할을 허용할 수 있도록 처리합니다.


3. Middleware 등록

생성한 미들웨어를 Laravel의 글로벌 미들웨어 리스트에 등록해야 합니다. app/Http/Kernel.php 파일을 열고 $routeMiddleware 배열에 다음과 같이 추가합니다.

protected $routeMiddleware = [
    // 다른 미들웨어들...
    'role' => \App\Http\Middleware\RoleMiddleware::class,
];

 

* Laravel bootstrap/app.php 파일에서 미들웨어를 등록할 수 있습니다. 


4. Middleware 적용

이제 미들웨어를 특정 라우트에 적용할 수 있습니다. 예를 들어, 본사가맹점 역할을 가진 사용자만 접근할 수 있도록 설정하려면 다음과 같이 사용합니다.

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'verified', 'role:본사|가맹점']);

이제 본사 또는 가맹점 역할을 가진 사용자만 해당 페이지에 접근할 수 있습니다.


5. 사용자 역할 확인 메서드 (예제)

사용자의 역할을 확인하는 authRole() 함수는 데이터베이스에서 사용자 역할을 가져오는 방식에 따라 다를 수 있습니다. 일반적으로 아래와 같이 구현할 수 있습니다.

function authRole()
{
    return Auth::user()->role ?? null;
}

이제 authRole() 함수를 사용하여 현재 로그인한 사용자의 역할을 확인할 수 있습니다.


이제 Laravel에서 Custom Role Middleware를 생성하고, 여러 역할을 허용하는 방식으로 확장하는 방법을 배웠습니다.

이 미들웨어를 사용하면 사용자 역할에 따라 접근을 제한할 수 있으며, role:본사|가맹점과 같이 간편하게 설정할 수 있습니다.

반응형