Крок 1 : створення нового проекту Laravel
composer create-project laravel/laravel laravelapp --prefer-dist
Крок 2 : додавання нового стовпця до файлу міграції для користувачів
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
//додаємо стовпець для збереження ролі користувача
$table->enum('role', ['admin', 'customer'])->default('customer');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Крок 3 : додавання тестових даних у сидер
public function run(): void
{
User::factory()->create([
'name' => 'Admin',
'email' => '[email protected]',
'role' => 'admin',
'password' => '1234'
]);
User::factory()->create([
'name' => 'Customer',
'email' => '[email protected]',
'role' => 'customer',
'password' => '1234'
]);
}
Крок 4 : запуск міграції з сидером
php artisan migrate --seed
```
Крок 5 : створення представлень
php artisan make:view login
php artisan make:view admin/dashboard
php artisan make:view customer/dashboard
Крок 6 : створення контролерів
php artisan make:controller AuthController
php artisan make:controller AdminController
php artisan make:controller CustomerController
Крок 7 : додавання наступного методу в модель User
public function hasRole($role)
{
return $this->role === $role;
}
Крок 8 : створення маршрутів
group(function(){
Route::get('/', function () {
return view('welcome');
});
Route::view('/login', 'login')->name('login');
Route::post('/login', [AuthController::class, 'login']);
});
Route::middleware('auth')->group(function(){
// Маршрут для панелі адміністратора
Route::middleware(['role:admin'])->group(function () {
Route::get('/admin/dashboard', [AdminController::class, 'index'])->name('admin.dashboard');
});
// Маршрут для панелі клієнта
Route::middleware(['role:customer'])->group(function () {
Route::get('/customer/dashboard', [CustomerController::class, 'index'])->name('customer.dashboard');
});
Route::get('/logout', function(){
Auth::logout();
});
});
Крок 9 : додавання необхідного коду до файлів представлень
- welcome.blade.php
welcome
login
``` - login.blade.php ```
@csrf
- admin/dashboard.blade.php
панель адміністратора
- customer/dashboard.blade.php
панель клієнта
Крок 10 : додавання необхідного коду до контролерів - AuthController.php
only('email', 'password'); if (auth()->attempt($credentials)) { $user = auth()->user(); // Перенаправлення в залежності від ролі if ($user->role === 'admin') { return redirect()->route('admin.dashboard'); } elseif ($user->role === 'customer') { return redirect()->route('customer.dashboard');
}
}
return back()->withErrors(['message' => 'Невірні облікові дані']);
}
}
```
-
AdminController.php
-
- @paramSymfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next, $role): Response
{
if (auth()->check() && auth()->user()->role === $role) {
return $next($request);
}
return redirect()->route('login')->withErrors(['message' => 'Доступ заборонено.']);
}
}
```
- @paramSymfony\Component\HttpFoundation\Response) $next
- RedirectIfAuthenticated.php
check()) {
$user = Auth::guard($guard)->user();
// Перенаправлення на основі ролі
if ($user->hasRole('admin')) {
return redirect()->route('admin.dashboard');
}
if ($user->hasRole('customer')) {
return redirect()->route('customer.dashboard');
}
// Резервне перенаправлення
return redirect('/home');
}
}
return $next($request);
}
}
Крок 13: додайте псевдоніми для middleware в app.php та перепишіть стандартний middleware для гостя
- bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'role' => RoleMiddleware::class,
'guest' => RedirectIfAuthenticated::class
]);
})
Тепер запустіть проєкт.
Дякуємо, що були з нами!
Перекладено з: How to Set Up Multi-Auth with a Custom Login System in Laravel 11