klg-asutk-app/docs/FINAL_REVIEW_KLG_2026-02-15.md
Yuriy 0a19a03b6e fix: seed data, API 500 errors, security hardening
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-15 21:35:22 +03:00

6.4 KiB
Raw Permalink Blame History

Финальное заключение: КЛГ АСУ ТК

Дата: 15 февраля 2026
Ревизия: 3 (после двух итераций исправлений)
Репозиторий: github.com/yrippert-maker/klg-asutk-app
Коммиты: 4 (initial → consolidation → security fix → missing files)


Резюме

Проект прошёл через два цикла исправлений. Все 18 выявленных проблем из первого ревью адресованы. Из них 17 полностью исправлены, 1 косметическая (R-2).

Общая оценка

Категория Первая проверка Сейчас
Запускается ли приложение? 6+ ImportError Все модули на месте
Backend (API, бизнес-логика) 🟡 🟢
Frontend (React/Next.js) 🟡 🟢
Безопасность 🔴 🟢
Архитектура и соответствие ТЗ 🟢 🟢

Проверка всех исправлений

Полностью исправлено (17 из 18)

# Проблема Файл Проверено
1 oidc.py не существует deps.py переписан → security.py
2 Два модуля авторизации Единая цепочка deps→security
3 Fallback на admin без токена Без токена → 401 Always
4 rate_limit.py отсутствует Создан, TokenBucket алгоритм
5 helpers.py отсутствует Создан, расширенный (audit, tenant, pagination)
6 ws_manager.py отсутствует Создан, полная реализация + домен-уведомления
7 risk_scheduler.py отсутствует Создан, APScheduler + ФГИС sync
8 email_service.py отсутствует Создан, SMTP + шаблоны + stub
9 request_logger.py отсутствует Создан, с X-Response-Time
10 AUTH_DEPENDENCY не применялся Все роутеры защищены
11 Path traversal в attachments Path.resolve() + startswith check
12 Нет проверки владельца (attachments) is_authority + uploaded_by_user_id
13 Дефолтный SECRET_KEY ${SECRET_KEY:?...} — обязательный
14 Keycloak и приложение на одной БД Отдельный keycloak-db сервис
15 CSP: unsafe-eval + api.openai.com Убраны; connect-src включает api.anthropic.com
16 Токен в sessionStorage Только in-memory _token
R-1 setup_scheduler не вызывался в lifespan В lifespan перед yield вызывается setup_scheduler(app)

📝 Косметическое (1)

R-2: Deprecated lib/api.ts удалён, но Aircraft дублируется

Интерфейс Aircraft перемещён в api-client.ts с [key: string]: any — типизация всё ещё слабая. Не блокирует работу, но стоит заменить any на конкретные типы в будущем.


Качество созданных файлов

Cursor создал файлы не как минимальные заглушки, а как полноценные реализации с доменной логикой:

Файл Качество Примечания
helpers.py 🟢 Отлично diff_changes, tenant filtering, org caching
ws_manager.py 🟢 Отлично Room-based + user/org routing, домен-специфичные notify-функции (AD, дефекты, AOG, LifeLimit)
risk_scheduler.py 🟢 Отлично APScheduler 6ч + ФГИС РЭВС авто-sync 24ч, graceful degradation
email_service.py 🟢 Отлично SMTP + stub, шаблоны для критических алертов, singleton
request_logger.py 🟢 Хорошо X-Response-Time header, skip health/metrics, аудит regulator-доступа
rate_limit.py 🟢 Хорошо TokenBucket алгоритм вместо простого sliding window, skip health/docs

Архитектура после исправлений

Запрос → RateLimitMiddleware → RequestLoggerMiddleware → CORS
       → AUTH_DEPENDENCY (deps.py → security.py → OIDC/Keycloak)
       → Роутер (RBAC через require_roles)
       → Бизнес-логика → DB (RLS по org_id)
       → Audit trail (helpers.audit)
       → WebSocket уведомления (ws_manager)
       → Ответ

Цепочка безопасности: Rate limit → Logging → Auth → RBAC → RLS → Audit — полная.


Оставшиеся рекомендации (не блокирующие)

  1. Типизировать API-клиент — заменить PaginatedResponse<any> на конкретные интерфейсы. Не срочно, но повысит надёжность frontend.
  2. Проверить storage_dir / INBOX_DATA_DIRattachments.py использует settings.INBOX_DATA_DIR, storage.pysettings.storage_dir. Убедиться, что оба указывают на одну корневую директорию.
  3. Тесты — проверить прохождение после рефакторинга deps.py (async get_current_user может сломать mock-и в тестах).
  4. В production убрать ENABLE_DEV_AUTH — в .env.example и документации чётко пометить, что ENABLE_DEV_AUTH=true допустим ТОЛЬКО в development.

Заключение

Проект готов к запуску в dev-среде и близок к production-ready прототипу. Все критические уязвимости безопасности устранены. Архитектура соответствует требованиям ТЗ «КЛГ под АСУ ТК».

Рекомендация: готов к demo/UAT.