66 lines
3.4 KiB
PHP
66 lines
3.4 KiB
PHP
<?php
|
||
|
||
use App\Http\Controllers\Auth\AuthenticatedSessionController;
|
||
use App\Http\Controllers\Auth\PasswordController;
|
||
use App\Http\Controllers\Auth\TwoFactorController;
|
||
use Illuminate\Support\Facades\Route;
|
||
use Inertia\Inertia;
|
||
|
||
/*
|
||
|--------------------------------------------------------------------------
|
||
| Публичные маршруты
|
||
|--------------------------------------------------------------------------
|
||
*/
|
||
Route::inertia('/', 'Welcome')->name('home');
|
||
|
||
/*
|
||
|--------------------------------------------------------------------------
|
||
| Аутентификация (меры ИАФ.*, РСБ.2)
|
||
|--------------------------------------------------------------------------
|
||
| Вход защищён ограничением частоты (throttle) — мера ИАФ.6/УПД.6.
|
||
*/
|
||
Route::middleware('guest')->group(function () {
|
||
Route::get('login', [AuthenticatedSessionController::class, 'create'])->name('login');
|
||
// Блокировка после N неудачных попыток реализована в LoginRequest (ИАФ.6)
|
||
// с регистрацией события auth.locked в журнале (РСБ.2).
|
||
Route::post('login', [AuthenticatedSessionController::class, 'store']);
|
||
});
|
||
|
||
Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])
|
||
->middleware('auth')
|
||
->name('logout');
|
||
|
||
/*
|
||
|--------------------------------------------------------------------------
|
||
| Многофакторная аутентификация (мера ИАФ.4)
|
||
|--------------------------------------------------------------------------
|
||
| Доступны аутентифицированному пользователю до прохождения второго фактора.
|
||
*/
|
||
Route::middleware('auth')->group(function () {
|
||
Route::get('mfa/setup', [TwoFactorController::class, 'setup'])->name('mfa.setup');
|
||
Route::post('mfa/enable', [TwoFactorController::class, 'enable'])->name('mfa.enable');
|
||
Route::get('mfa/challenge', [TwoFactorController::class, 'challenge'])->name('mfa.challenge');
|
||
Route::post('mfa/verify', [TwoFactorController::class, 'verify'])
|
||
->middleware('throttle:login')
|
||
->name('mfa.verify');
|
||
Route::delete('mfa', [TwoFactorController::class, 'disable'])->name('mfa.disable');
|
||
|
||
// Принудительная смена пароля по истечении срока (мера ИАФ.3).
|
||
Route::get('password/expired', [PasswordController::class, 'expired'])->name('password.expired');
|
||
Route::put('password', [PasswordController::class, 'update'])->name('password.update');
|
||
});
|
||
|
||
/*
|
||
|--------------------------------------------------------------------------
|
||
| Защищённая зона: требует аутентификации, второго фактора и актуального пароля
|
||
|--------------------------------------------------------------------------
|
||
| Полный стек мер: auth -> mfa (ИАФ.4) -> password.fresh (ИАФ.3) -> audit (РСБ.2).
|
||
*/
|
||
Route::middleware(['auth', 'mfa', 'password.fresh', 'audit'])->group(function () {
|
||
Route::get('dashboard', fn () => Inertia::render('Dashboard'))->name('dashboard');
|
||
|
||
// Здесь размещайте маршруты работы с ПДн. Доступ дополнительно проверяется
|
||
// через Policy (мера УПД.2), например:
|
||
// Route::resource('personal-data', PersonalDataController::class);
|
||
});
|