Files
laravel-gost-template/CLAUDE.md
2026-06-24 17:20:43 +09:00

80 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CLAUDE.md
Шаблон защищённого Laravel-приложения для ИСПДн (ФСТЭК №21, УЗ-1/К1; ФСБ №378).
Используется как основа для новых проектов с персональными данными.
## Команды
```bash
composer lint # Pint (стиль)
./vendor/bin/phpstan # Larastan, level 7 — держать 0 ошибок
./vendor/bin/pest # тесты (включая tests/Feature/Security)
composer audit # уязвимости зависимостей
npm run build # сборка фронтенда (нужна для рендера Inertia-страниц)
php artisan migrate
php artisan migrate --database=audit --path=database/migrations/audit
php artisan db:seed # роли RBAC
php artisan user:create-admin # создать администратора
php artisan audit:verify # контроль целостности журнала (РСБ.3)
php artisan audit:purge # ротация журнала по сроку (РСБ.4/8)
php artisan security:audit-deps # composer audit (УКФ.4)
```
## Архитектура безопасности (что где)
- **Конфигурация мер:** `config/security.php`, `config/audit.php`. Все параметры
через `.env` (пароли, lockout, MFA, шифрование, заголовки).
- **Шифрование ПДн:** трейт `App\Models\Concerns\HasPdnEncryption` + свойство
`$encrypted` в модели. Драйвер за интерфейсом `App\Services\Crypto\PdnCipher`
(`LaravelAesCipher` / `GostCipher`), биндинг в `SecurityServiceProvider`.
- **Аудит:** `App\Services\Audit\AuditService` (фасад `App\Facades\Audit`).
Записи в отдельном соединении `audit`, подписаны HMAC + хеш-цепочка. Не писать
ПДн в журнал — только идентификаторы объектов.
- **Аутентификация:** контроллеры в `App\Http\Controllers\Auth`, блокировка в
`LoginRequest`, MFA в `TwoFactorService`/`EnsureMfaIsVerified`, парольная
политика в `App\Support\PasswordPolicy` + `PasswordManager` + `PasswordNotReused`.
- **Доступ:** `spatie/laravel-permission` (роли в `RolesAndPermissionsSeeder`),
Policies (`PersonalDataPolicy`).
- **Middleware-стек защищённой зоны:** `auth``mfa``password.fresh`
`audit` (см. `routes/web.php`, алиасы в `bootstrap/app.php`).
## Конвенции
- Любая новая модель с ПДн: `use HasPdnEncryption` + `$encrypted` + `checksum`
(контроль целостности, ОЦЛ.2) + Policy (УПД.2) + регистрация просмотра/изменения
через `Audit::log()` (РСБ.2).
- Все операции, изменяющие/раскрывающие ПДн, должны журналироваться. Новые типы
событий добавлять в `config/audit.php` и `docs/org/perechen-sobytiy.md`.
- Валидация — только через Form Request. Пароли — через `PasswordPolicy::rule()`.
- Не понижать меры: `APP_DEBUG=false`, TLS, MFA обязательны в production.
- После изменений держать зелёными Pint, PHPStan (level 7), Pest.
## Фронтенд (Inertia v3 + Vue 3 + NaiveUI)
- **Inertia v3** (`@inertiajs/vue3`). HTTP — встроенными хелперами: `useForm`
(формы/редиректы, как на страницах входа), `useHttp` (JSON-эндпоинты),
`router`, `<Form>`. **axios не используется** — не добавлять.
- **UI: NaiveUI** (перенесён движок из проекта onboard). Подключение в
`resources/js/app.ts`: провайдеры `NConfigProvider`/`NLoadingBar`/`NDialog`/
`NNotification`/`NMessage` оборачивают приложение; тема следует системной
(`plugins/naive.ts → preferredTheme`). Discrete API доступен как
`window.$message`/`$notification`/`$dialog`/`$loadingBar` и через `this.$...`.
- **Pinia** подключён (для сторов состояния).
- Структура: `resources/js/{pages,layouts,components,composables,plugins}`.
Макеты: `layouts/AuthLayout.vue` (страницы входа), `layouts/AppLayout.vue`
(общий каркас с шапкой и индикатором загрузки).
- Composables: `useGlobalLoading` (баннер на переходах Inertia),
`useNotification`, `useAppDialog` (+`AppDialog`/`AppDialogManager`).
- Шрифт Golos Text (`public/fonts`, `@font-face` в `resources/css/app.css`).
- Проверки фронтенда: `npm run lint:check`, `npm run types:check`, `npm run build`.
## Документация
- `docs/security/compliance.md` — сопоставление мер ФСТЭК с кодом.
- `docs/security/checklist.md` — чек-лист со статусами.
- `docs/security/crypto-gost.md` — подключение СКЗИ (ГОСТ/КриптоПро).
- `docs/org/` — шаблоны организационных документов.
- `deploy/` — nginx (TLS/заголовки), docker-compose, Dockerfile, fail2ban.
- `database/sql/audit_grants.sql` — права INSERT/SELECT для журнала (РСБ.3).