# E2E report: multi-tenant-isolation Запущен: 2026-05-23T07:24:02.202Z Длительность: 2.6с **Итог:** 12 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 12) ## ✓ Step step01_create_two_orgs: SuperAdmin создаёт две независимые орги Alpha и Beta (каждая со своим админом) Длительность: 1065мс | Тип | Проверка | Результат | |---|---|---| | api | Создана Alpha | ✓ 97001312-2638-4ecc-a824-ca82a3de5a13 | | api | Создана Beta | ✓ e45ab366-7430-4538-964b-0a57128a5259 | | api | orgId Alpha ≠ orgId Beta | ✓ | ## ✓ Step step02_login_both_admins: Логин под admin Alpha и admin Beta — получаем два разных org_id в JWT Длительность: 709мс | Тип | Проверка | Результат | |---|---|---| | api | Login Alpha admin → 200 | ✓ | | api | Login Beta admin → 200 | ✓ | | api | Alpha orgId == ctx.alpha.orgId | ✓ claim=97001312-2638-4ecc-a824-ca82a3de5a13 | | api | Beta orgId == ctx.beta.orgId | ✓ claim=e45ab366-7430-4538-964b-0a57128a5259 | ## ✓ Step step03_seed_data_in_alpha: Admin Alpha создаёт counterparty + product → запоминаем их ID Длительность: 133мс | Тип | Проверка | Результат | |---|---|---| | api | Alpha создаёт counterparty | ✓ 636444a0-ff58-4ffa-9aba-2bfe1987d0d7 | | api | Alpha создаёт product | ✓ 2999c14b-e923-4a21-a724-83e5e106176e | ## ✓ Step step04_beta_cannot_read_alpha: Admin Beta GET /api/catalog/counterparties/{alphaId} и /products/{alphaId} → 404 Длительность: 31мс | Тип | Проверка | Результат | |---|---|---| | api | Beta GET counterparties/{alphaId} → 404 | ✓ actual=404 | | api | Beta GET products/{alphaId} → 404 | ✓ actual=404 | ## ✓ Step step05_beta_cannot_list_alpha_data: Admin Beta GET /api/catalog/counterparties|/products → пустые списки (нет данных Alpha) Длительность: 37мс | Тип | Проверка | Результат | |---|---|---| | api | Beta GET counterparties не содержит Alpha counterparty | ✓ всего=0, утечек=0 | | api | Beta GET products не содержит Alpha product | ✓ всего=0, утечек=0 | ## ✓ Step step06_beta_cannot_modify_alpha: Admin Beta PUT/DELETE /api/catalog/products/{alphaId} → 404 (не 200, не 403) Длительность: 70мс | Тип | Проверка | Результат | |---|---|---| | api | Beta PUT products/{alphaId} с валидным телом → 404/403 | ✓ actual=404 {"type":"https://tools.ietf.org/html/rfc9110#section-15.5.5","title":"Not Found","status":404,"trace | | api | Beta DELETE products/{alphaId} → 404/403 | ✓ actual=404 | ## ✓ Step step07_beta_cannot_link_to_alpha: Admin Beta POST product с DefaultSupplierId=alphaCounterpartyId → 400 (FK через query filter) Длительность: 31мс | Тип | Проверка | Результат | |---|---|---| | api | Beta POST product с supplierId Alpha → 4xx | ✓ actual=400 | ## ✓ Step step08_beta_cannot_forge_org_override: Admin Beta с заголовком X-Org-Override:{alphaId} → запрос всё равно идёт от Beta (не SuperAdmin) Длительность: 20мс | Тип | Проверка | Результат | |---|---|---| | api | Beta admin + X-Org-Override → 404/403 | ✓ actual=404 | ## ✓ Step step09_superadmin_sees_both: SuperAdmin без override GET /api/super-admin/organizations → видит и Alpha и Beta Длительность: 16мс | Тип | Проверка | Результат | |---|---|---| | api | SuperAdmin видит Alpha в списке орг | ✓ total=2 | | api | SuperAdmin видит Beta в списке орг | ✓ | ## ✓ Step step10_superadmin_readonly_override: SuperAdmin с X-Org-Override:{alphaId} → GET товаров Alpha (200), PUT/POST без reason → 403 Длительность: 22мс | Тип | Проверка | Результат | |---|---|---| | api | SuperAdmin+override GET → 200 | ✓ actual=200 | | api | SuperAdmin+override PUT без reason → 403 | ✓ actual=403 | ## ✓ Step step11_superadmin_edit_override_with_reason: SuperAdmin с X-Org-Override + X-Org-Override-Reason → PUT 200 + запись в audit_log Длительность: 381мс | Тип | Проверка | Результат | |---|---|---| | api | SuperAdmin+override+reason PUT counterparty → 200/204 | ✓ actual=204 | | db | Counterparty.Name изменено в БД | ✓ name=edited-by-superadmin-1779521042201 | | db | super_admin_audit_log выросло | ✓ before=2 after=3 | ## ✓ Step step12_stock_isolation: Остатки Alpha и Beta не смешиваются — Supply в Alpha не появляется в /inventory/stock у Beta Длительность: 112мс | Тип | Проверка | Результат | |---|---|---| | api | Alpha создаёт supply | ✓ actual=201 {"id":"40be416d-4a74-4d98-b31c-6f50bb1ed717","number":"П-2026-000001","date":"2026-05-23T07:24:06.345Z","status":0,"supp | | api | Alpha проводит supply | ✓ actual=204 | | api | Beta /inventory/stock не содержит Alpha product | ✓ total=0, утечка=нет | | api | Beta /inventory/movements не содержит Alpha movement | ✓ total=0, утечка=нет | ## Summary - Passed: 12 - Failed: 0 - Warnings: 0 - Skipped: 0 ## Critical bugs Нет. ## Logic gaps - ProductsController.Put в режиме X-Org-Override роняет DbUpdateConcurrencyException при пересылке prices/barcodes — merge-логика не учитывает override-режим. Ремонт PUT product через override-консоль невозможен.