first commit

This commit is contained in:
brusnitsyn
2026-06-24 17:20:43 +09:00
commit 43499acf1c
165 changed files with 25929 additions and 0 deletions

65
routes/web.php Normal file
View File

@@ -0,0 +1,65 @@
<?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);
});