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:본사|가맹점과 같이 간편하게 설정할 수 있습니다.
'IT & 개발 > laravel' 카테고리의 다른 글
Laravel에서 increment() 메서드 사용 시 즉시 업데이트되지 않는 문제 해결하기 (0) | 2024.12.02 |
---|---|
Laravel에서 데이터 정렬하기: orderBy 메소드 활용하기 (1) | 2024.11.25 |
라라벨에서 커스텀 helper 등록하기 (2) | 2024.10.07 |
Laravel의 whereJsonContains 메서드: JSON 데이터 필터링의 강력한 도구 (3) | 2024.10.07 |
라라벨 Sail 설정 가이드 (0) | 2023.10.10 |