회원 DB 에서 사용자를 admin, user, agent, 또는 등급에 따라서 각각의 페이지 즉, 접속하는 공간을 분리하고 싶을때는 어떻게 하면 될까?
우선 회원 DB 에서 컬럼 추가. 등급 지정
로그인 시 확인.
혹시 허락되지 않은 공간 접속시..튕겨 나가게 할것.
라라벨에서는 유저와 서버 사이에 미들웨어를 둔다. 미들웨어는 사용자의 요청을 받을건지 아니면 튕겨 버릴건지를 판단해 주는 곳이다.
Route::middle();
Route::middle('auth')
Route::middle(['auth', 'role'])
Route::middle(['auth', 'role:admin'])
'role:admin' 이건 뭘 의미할까?
php artisan make:middleware Role
app/Http/Middleware/Role.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class Role
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next, $role): Response
{
if ($request->user()->role != $role) {
return redirect('dashboard');
}
return $next($request);
}
}
$role 은 middleware(['role:admin'])에서 admin 으로 넘어온다.
: 구분자를 이용해서 넘겨 받는다.
bootstrap/app.php
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'role' => \App\Http\Middleware\Role::class,
]);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
-> Laravel 11
Route
routes/web.php
Route::middleware(['auth', 'role:admin'])->group(function(){
Route::get('/admin/dashboard', [AdminController::class, 'dashboard'])->name('admin.dashboard');
});
https://laravel.com/docs/11.x/middleware#middleware-parameters
Laravel - The PHP Framework For Web Artisans
Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small things.
laravel.com
Route::put('/post/{id}', function (string $id) {
// ...
})->middleware('role:editor');
콤마로 추가함.
Route::put('/post/{id}', function (string $id) {
// ...
})->middleware('role:editor,publisher');
아래 사이트 참고하기
Laravel 11 Breeze Multi Auth Tutorial
'Laravel' 카테고리의 다른 글
Laravel > Docker > Sail (도커에서 라라벨 프로젝트 세팅하기) for Mac (0) | 2024.08.26 |
---|---|
Laravel > 원하는 버전으로 설치하기 (0) | 2024.08.21 |
Laravel > Herd > 보안 연결(HTTPS)이 사용되지 않았습니다. 해결 (0) | 2024.07.11 |
Tailwind > Typography 플로그인 (0) | 2024.07.11 |
Laravel > REST API 쉽게 구현해주는 패키지 (0) | 2024.07.11 |