ADR-0014: Repository Pipeline И Scope Filters
Статус
Accepted
Контекст
EF global query filters и EF interceptors недостаточны как единственный защитный механизм tenant/brand/user boundaries. Эти правила должны работать одинаково для PostgreSQL, Elasticsearch, ClickHouse и Redis-backed read paths.
Решение
Ввести repository pipeline:
- repositories не возвращают
IQueryable; - scope interceptors применяют
TenantId,BrandId,UserId,PartnerId; - missing required scope fail closed;
- bypass требует permission, reason и audit;
- mutation interceptors проставляют scope fields и audit fields.
Последствия
- Tenant isolation становится проверяемой в integration tests.
- Admin cross-tenant access явно виден и аудируется.
- Query filters не размазываются по handlers.
Ссылки
- Repository Abstractions And Scope Filters
Обратные ссылки
Автоссылки: где используется этот документ.
- API (2): GET /api/agent/crm/fixations — Список фиксаций агентства (+ поиск), GET /api/pin-manager/crm/fixations — Сквозной список всех фиксаций платформы
- Поиск (5): ClientSearchDocument, DealSearchDocument, FixationRequestSearchDocument, KbArticleSearchDocument, TicketSearchDocument
- 05-repository-pipeline.md (1): Repository Pipeline и Scope Filters — Практическое Руководство