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); });