food-market/docs
nns 8e54e2e0d6 feat(s13): security headers + rate-limits + sensitive-ops audit + session revoke + Grafana
Sprint 13 — security + observability deep. 7 пунктов чек-листа ✓.

Подробности — docs/sprint13-progress.md и docs/food-market-server-postgres-role.md.

Главное:
- food-market-server (back.food-market.kz, legacy backend) теперь
  работает на dedicated PG-роли food_market_server_app (NOSUPERUSER /
  NOCREATEDB / NOCREATEROLE / NOREPLICATION / NOBYPASSRLS) с CRUD-only
  грантами. Раньше использовался postgres-superuser с паролем 1q2w3e4r.
  Бэкап конфига сохранён, rollback одной командой.
- SecurityHeadersMiddleware навешивает CSP / X-Frame-Options DENY /
  X-Content-Type-Options nosniff / Referrer-Policy strict-origin /
  Permissions-Policy. HSTS 365d + includeSubDomains + preload.
  Те же заголовки в deploy/nginx.conf для SPA HTML.
- Rate-limit:
  • Signup-IP — 3/час + 10/день (на stage'е переопределено через
    .env RATE_SIGNUP_HOUR=30 чтобы не ломать e2e).
  • Forgot-password — per-email 3/час + per-IP 10/час.
- SensitiveOpsAudit сервис, wired в:
  • TwoFactor enroll/disable
  • Employees.Update при смене RoleId (action=AssignRole,
    payload с prev/next role + полный RolePermissions)
  • MeAccount.ChangePassword (новый endpoint)
  • MeSessions.RevokeAll (новый endpoint)
- POST /api/me/sessions/revoke-all — через
  IOpenIddictAuthorizationManager.FindBySubjectAsync + TryRevokeAsync.
  Integration-тест: refresh после revoke → 400/401.
- Hangfire dashboard — nginx-route добавлен (раньше /hangfire ловился
  SPA-fallback'ом). Фильтр SuperAdmin'ом уже был. Тест: anon/tenant →
  401/403/404.
- Grafana dashboard JSON (deploy/grafana/dashboards/food-market.json,
  9 панелей) + инструкции импорта в docs/observability.md.

Проверено на stage'е: все 6 security-заголовков видны на /;
/hangfire → 401 (закрыт); 4-я форгот → 429; stage-smoke (5 этапов) ✓.

Тесты: 68 unit + 9 integration (включая 3 новых: SessionRevokeTests,
HangfireAccessTests).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 12:30:10 +05:00
..
24x7.md ci: move POS (Windows, 2x multiplier) to tag/manual only; document budget 2026-04-22 11:36:29 +05:00
ARCHITECTURE.md docs(s12): ARCHITECTURE/MULTI-TENANCY/RUNBOOK/DEVELOPER-GUIDE + k6 baseline + stage-verify CI 2026-06-07 03:19:25 +05:00
architecture.md Phase 0: project scaffolding and end-to-end auth 2026-04-21 13:59:13 +05:00
audit-2026-04-27.md fix(auth): закрыть критические дыры — orphan login, self-delete, owner-delete, override-баннер 2026-04-27 09:28:18 +05:00
audit-2026-05-06.md docs(audit): полный аудит цепочки авторизации — 2026-05-06 2026-05-06 11:32:07 +05:00
audit-moysklad.md docs: audit of our domain entities vs. live OtherSystem API 2026-04-23 12:57:06 +05:00
backup-restore.md feat(deploy): авто-бэкап БД+uploads — systemd timer/service + скрипт (P0-6) 2026-05-27 02:49:08 +05:00
DEVELOPER-GUIDE.md docs(s12): ARCHITECTURE/MULTI-TENANCY/RUNBOOK/DEVELOPER-GUIDE + k6 baseline + stage-verify CI 2026-06-07 03:19:25 +05:00
food-market-server-postgres-role.md feat(s13): security headers + rate-limits + sensitive-ops audit + session revoke + Grafana 2026-06-07 12:30:10 +05:00
forgejo.md ops: Forgejo on git.zat.kz as primary, GitHub as mirror 2026-04-23 12:27:45 +05:00
logging.md feat(logging): структурные log-fields в Serilog (TD-4) 2026-05-28 17:46:17 +05:00
MULTI-TENANCY.md docs(s12): ARCHITECTURE/MULTI-TENANCY/RUNBOOK/DEVELOPER-GUIDE + k6 baseline + stage-verify CI 2026-06-07 03:19:25 +05:00
observability.md feat(s13): security headers + rate-limits + sensitive-ops audit + session revoke + Grafana 2026-06-07 12:30:10 +05:00
ofd-integration.md feat(s11): ОФД-scaffolding — IFiscalProvider + 4 провайдера + UI/тесты 2026-06-07 02:27:17 +05:00
openapi.md feat(openapi): улучшенный Swagger + TS-клиент через openapi-typescript (P1-19) 2026-05-28 11:39:22 +05:00
openiddict-keys.md feat(auth): prod X509-ключи OpenIddict с persistent self-signed (P0-1) 2026-05-27 02:47:00 +05:00
performance-baseline.md docs(s12): ARCHITECTURE/MULTI-TENANCY/RUNBOOK/DEVELOPER-GUIDE + k6 baseline + stage-verify CI 2026-06-07 03:19:25 +05:00
release-checklist.md docs: чек-лист релиза (P0-9) 2026-05-27 02:52:16 +05:00
RUNBOOK.md docs(s12): ARCHITECTURE/MULTI-TENANCY/RUNBOOK/DEVELOPER-GUIDE + k6 baseline + stage-verify CI 2026-06-07 03:19:25 +05:00
secrets.md docs(deploy): .env.example + secrets.md, проброс OpenIddict env в compose (P0-8) 2026-05-27 02:51:13 +05:00
sprint-ui-deep-progress.md test(ui-deep): items 10-14 — все 59/59 ✓ на стейдже 2026-05-30 13:53:57 +05:00
sprint1-progress.md docs(sprint1): P1-21 done — все 9 пунктов выполнены, итог 2026-05-27 03:16:25 +05:00
sprint2-progress.md docs(sprint2): P1-16 done — все 7 пунктов выполнены, итог 2026-05-28 10:07:53 +05:00
sprint3-progress.md docs(sprint3): P1-19 done — все 5 пунктов выполнены, итог 2026-05-28 11:40:01 +05:00
sprint4-progress.md docs(sprint4): P1-17 done — все 3 пункта выполнены, итог 2026-05-28 12:20:50 +05:00
sprint5-progress.md docs(sprint5): TD-5 done — все 4 пункта выполнены, итог 2026-05-28 16:47:32 +05:00
sprint6-progress.md docs(sprint6): P2-4 done — все 5 пунктов выполнены, итог 2026-05-28 17:59:47 +05:00
sprint7-progress.md docs(sprint7): пункты 6-7 ✓ + итог по спринту 2026-05-30 11:52:00 +05:00
sprint8-progress.md test(s8-4): MinIO stage e2e + final progress 2026-05-31 20:25:19 +05:00
sprint9-progress.md docs(sprint9): итог — все 4 пункта ✓, stage 8/8 e2e зелёные 2026-05-31 21:38:26 +05:00
sprint10-progress.md feat(s10-4): dark mode полировка + Cmd+K палитра + аудит-spec 2026-06-06 01:30:41 +05:00
sprint11-progress.md feat(s11): ОФД-scaffolding — IFiscalProvider + 4 провайдера + UI/тесты 2026-06-07 02:27:17 +05:00
sprint12-progress.md docs(s12): ARCHITECTURE/MULTI-TENANCY/RUNBOOK/DEVELOPER-GUIDE + k6 baseline + stage-verify CI 2026-06-07 03:19:25 +05:00
sprint13-progress.md feat(s13): security headers + rate-limits + sensitive-ops audit + session revoke + Grafana 2026-06-07 12:30:10 +05:00
stage-access.md docs(stage): switch stage subdomain to food-market.zat.kz 2026-04-22 20:31:20 +05:00
stage-setup.md ci/deploy: stage deploy workflow + notifications + server plan 2026-04-22 13:46:03 +05:00
stage-testing-progress.md docs(stage): итоговый отчёт — все 14 пунктов ✓ (94/94 шагов зелёные) 2026-05-29 17:59:04 +05:00
telegram-bridge.md feat(ops): Telegram <-> tmux bridge + local docker-registry unit 2026-04-23 10:53:45 +05:00
TZ-доработка.md docs: ТЗ на доработку и тестирование (полный аудит 2026-05-22) 2026-05-22 15:30:04 +05:00
TZ-тестирование.md docs: ТЗ на доработку и тестирование (полный аудит 2026-05-22) 2026-05-22 15:30:04 +05:00
verify-progress.md test(verify-sprint): итог 78/78 stage-ui specs + V-13/14/15 verify specs + smtp4dev manual check 2026-06-04 22:25:41 +05:00