로그인된 사용자 중에서
관리자를 지정하고 구분하는 방법은 ?
◎Laravel 11 버전과 이전 버전이 달라서 코드를 구분해 두었다.
용어 구분하기
사용자 로그인 > 인증 > Authentication
로그인한 사용자의 권한 확인 > Authorization
1. 로그인 되었는지 확인 방법
// blade template
@if(auth()->user())
로그인 확인됨.
@endif
2. 관리자로 로그인 되었는지 확인방법
// blade template
@if(auth()->user()->is_admin)
관리자 로그인.
@endif
위와 같이 확인 할려면.
User table 에 is_admin 컬럼을 추가해서 관리자로 지정한다.
is_admin 컬럼 추가하기
php artisan make:migration add_admin_to_users_table
아래 파일이 생성됨..xxxx 는 오늘 날짜로 표현되어 있음.
database/migrations/xxxx_xx_xx_xxxxxx_add_admin_to_users_table.php
생성된 파일에 다음을 추가함.
return new class extends Migration
{
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->boolean('is_admin')->default(false);
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('is_admin');
});
}
};
터미널 창에서
php artisan migrate
첫번째로 회원 가입이 되어 있는 사용자를 관리자로 지정해보자.
php artisan tinker
$user = App\Models\User::find(1);
$user->is_admin = true;
$user->save();
관리자 확인 방법
1. Blade 에서
@if (Auth::user()->is_admin)
<a href="{{ route('admin.dashboard') }}" class="text-gray-500 hover:text-gray-700">
{{ __('Admin dashboard') }}
</a>
@endif
2. Middleware 에서 관리자만 접근하도록
AdminMiddleware 미들웨어 만들기
php artisan make:middleware AdminMiddleware
use Illuminate\Support\Facades\Auth; // 추가
public function handle(Request $request, Closure $next): Response
{
if (!Auth::check() || !Auth::user()->is_admin) {
abort(403, '관리자 권한이 필요합니다.');
}
return $next($request);
}
kernel.php 등록하기
protected $middlewareAliases = [
'admin' => \App\Http\Middleware\AdminMiddleware::class,
# Laravel 11
# bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'admin' => AdminMiddleware::class,
]);
routes/web.php 설정하기
Route::middleware(['auth', 'admin'])->group(function () {
Route::get('/admin/dashboard', [AdminController::class, 'testMiddleware'])->name('admin.dashboard');
});
3. Gate 사용하기
Gate 를 정의해서 통과 여부를 판단한다.
정의하기
class AuthServiceProvider extends ServiceProvider
{
public function boot()
{
Gate::define('admin-only', function (User $user) {
return $user->is_admin;
});
}
}
# Laravel 11
# app/Providers/AppServiceProvider.php
public function boot(): void
{
Gate::define('admin-only', function (User $user) {
return $user->is_admin;
});
}
Blade 에서 @can
@can('admin-only')
<div class="mb-4">
<p>{{ __("You're Admin logged in!") }}</p>
</div>
@endcan
Controller 에서
class AdminController extends Controller
{
public function index()
{
$this->authorize('admin-only');
return view('admin.dashboard');
}
## Laravel 11
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class AdminController extends Controller
{
use AuthorizesRequests;
public function index()
{
$this->authorize('admin-only');
return view('admin.dashboard');
}
읽을 거리
Middleware > Role:admin > 미들웨어에서 사용자를 구분할려면?
Laravel - 기존사이트에 spatie/laravel-permission 적용순서
Laravel - 유저권한 설정하기 Role, Permission (spatie/laravel-permission)
'Laravel' 카테고리의 다른 글
Laravel 에서 sqlite 추가 및 사용 방법 (0) | 2024.11.14 |
---|---|
Laravel - spatie/laravel-ignition (에러표시) (0) | 2024.11.14 |
Laravel > JWT-Auth vs Sanctum 에 대해서 (1) | 2024.11.05 |
Laravel 호스팅하기 > Forge > DigitalOcean 서버 세팅 및 파일 업로드 (0) | 2024.10.26 |
Laravel > Docker > Sail (도커에서 라라벨 프로젝트 세팅하기) for Mac (0) | 2024.08.26 |