Реализация правильной мультитенантной изоляции в контроллерах VS API (брокерский портал и оценка арендаторов) TL;DR: я провел рефакторингbroker-portal.controller.ts и tenant‑scoring.controller.ts, чтобы обеспечить выполнение запросов на уровне клиента, и добавил комплексные уни...
Реализация правильной мультитенантной изоляции в контроллерах VS API (брокерский портал и оценка арендаторов)
TL;DR: я провел рефакторингbroker-portal.controller.ts и tenant‑scoring.controller.ts, чтобы обеспечить выполнение запросов на уровне клиента, и добавил комплексные модульные тесты, увеличив охват этих модулей с 85%. Это изменение устраняет утечку данных между арендаторами и дает нам защиту для будущей логики аренды.
Проблема
Наш monorepoVS обслуживает несколько компаний по управлению недвижимостью (арендаторов) с помощью единого API NestJS. После спринта работы над функциями портал брокера начал возвращать объекты недвижимости, принадлежащие другим организациям, а конечная точка оценки арендаторов помечала платежи от несвязанных арендаторов как неоплаченные. Симптомом была полезная нагрузка JSON, содержащая идентификаторы свойств из другого идентификатора клиента, а результаты неудачного теста показали:
FAIL apps/api/src/__tests__/broker-portal.test.ts
● должен возвращать только недвижимость, принадлежащую арендатору брокера
Ожидается: [{"id":"prop-123","tenantId":"tenant-A",…}]
Получено: [{"id":"prop-123","tenantId":"tenant-A",…},{"id":"prop-999","tenantId":"tenant-B",…}]
Основная причина: оба контроллера запросили таблицу общих свойств без фильтрации по