32 lines
5.2 KiB
Markdown
32 lines
5.2 KiB
Markdown
# Устранение замечаний аудита 2026-09-18
|
||
|
||
Исходный отчёт проверял ревизию `14ed610`. Исправления подготовлены после `b88ff91`.
|
||
|
||
## Исправлено
|
||
|
||
- №1–5: регистрация отпечатка отменяется при блокировке, смене сотрудника и через 60 секунд; повторный палец отклоняется; поток захвата корректно завершается; связь контролируется и восстанавливается автоматически.
|
||
- №2–3, №27: повреждённое состояние обрабатывается fail-closed, ведутся три резервные копии, записи сериализованы и принудительно сбрасываются на диск, фоновые ошибки журналируются, `crash.log` ротируется.
|
||
- №6–8: роли мигратора и приложения разделены; runtime-роль имеет `NOSUPERUSER NOBYPASSRLS`; пароли согласованы; мигратор использует `schema_migrations`, advisory lock и откатывает только последнюю миграцию после явного подтверждения.
|
||
- №9–12: отметка обычного сотрудника не теряется при открытом диалоге администратора; PIN усилен и защищён задержкой; второй экземпляр перенаправляет активацию первому; дубликат пальца запрещён.
|
||
- №13–14: журнал экспортируется в CSV, имеет ограничение размера и восстановимые резервные копии; уход после полуночи определяется по настраиваемой максимальной длительности смены.
|
||
- №15–20: readiness возвращает `503` без деталей; маршруты соответствуют `/api/v1/staff`; OpenAPI сравнивается с runtime; пул БД обрабатывает ошибки; добавлен реальный RLS-тест двух tenant; audit log доступен runtime только на чтение/добавление; outbox хранит subject/actor; Redis-зависимости удалены до появления сценария.
|
||
- №21–23, №25–29, №31–33: автозапуск открывает приложение в трее и не сохраняет Debug-путь; новый профиль не включает автозагрузку без решения администратора; защита последнего администратора исправлена; PIN совместим со старыми значениями; публичные имена по умолчанию маскируются; проект только x64; manifest очищен; correlation ID проверяется как ULID; версия синхронизируется проверкой; graceful shutdown имеет таймаут; standalone запрещён в production; базовые Docker-образы закреплены digest.
|
||
- npm-зависимости обновлены: `npm audit` сообщает 0 уязвимостей. Форматирование включено в CI.
|
||
|
||
## Осознанно сохранено
|
||
|
||
- №24: повторная авторизация перед удалением отпечатков, сотрудников и журнала сохранена по прямому требованию владельца.
|
||
- №30: EULA ZKTeco добавлена рядом с DLL. Автоматическая Windows-сборка и подпись требуют Windows runner и сертификат подписи; этих ресурсов в текущем Forgejo окружении нет.
|
||
|
||
## Требует решения владельца, не является локальным исправлением кода
|
||
|
||
- A1: окончательный контракт терминала как edge-клиента Staff и серверная синхронизация вместо постоянного локального source of truth.
|
||
- A2: письменные согласия на биометрию, сроки хранения, правовое основание передачи уведомлений и политика трансграничной передачи должны быть утверждены с юристом.
|
||
|
||
## Проверка
|
||
|
||
- `npm run check` — пройдено.
|
||
- `npm run format:check` — пройдено.
|
||
- `npm audit --audit-level=moderate` — 0 уязвимостей.
|
||
- `dotnet build apps/KronaStaffTerminal/KronaStaffTerminal.csproj -c Release -p:Platform=x64` — 0 ошибок и 0 предупреждений.
|
||
- PostgreSQL/Docker up/down и реальный RLS-тест добавлены в CI, но локально не запускались: Docker и PostgreSQL на машине разработки отсутствуют.
|