security(rls): ENABLE_RLS обязателен в production (fatal без флага)

Шаг 0.1 (завершение) плана production-готовности:
- прод: ENABLE_RLS=true включён, 31 таблица ENABLE+FORCE проверена
- код: fatal при NODE_ENV=production без ENABLE_RLS
- .env.example + DOCKER.md: пометки об обязательности
This commit is contained in:
2026-09-08 10:55:58 +03:00
parent 12e797eb1a
commit 639036c87e
4 changed files with 31 additions and 1 deletions

View File

@@ -429,3 +429,16 @@
- Что осталось (прод, с подтверждения): 1) добавить ENABLE_RLS=true в .env сервера и перезапустить app, проверить; 2) затем задеплоить fatal-проверку (NODE_ENV=production без ENABLE_RLS → процесс не стартует) + пометки в .env.example/DOCKER.md.
- Влияние на поиск/UX: нет.
- Подводные камни: порядок важен — fatal-проверку деплоить ТОЛЬКО после включения флага на проде, иначе app не поднимется.
---
## [0.1] RLS обязательным в production — завершение
- Статус: ✅ done
- Что сделано после локальной проверки (см. запись выше):
1. Прод: бэкап БД (crm-20260908-075039.dump.gz), `ENABLE_RLS=true` в /opt/crm/.env, recreate app — старт-лог «Startup RLS: active — ENABLE+FORCE verified on 31 tables, 31 policies», health 200, поиск/списки через API работают.
2. Код: `server/index.ts` — при NODE_ENV=production без ENABLE_RLS=true — fatal (процесс не поднимается); dev — предупреждение.
3. Документация: `.env.example` (обязательность для production), `DOCKER.md` (sequence при старте + блок про RLS).
- Как проверялось: на проде подтверждено включение (pg_class relrowsecurity+relforcerowsecurity=31), smoke через API; локально — полный цикл на копии прод-БД.
- Влияние на поиск/UX: нет.
- Подводные камни: при переносе на новый сервер — сначала ENABLE_RLS=true в .env, иначе app не поднимется (это и есть цель шага).