page-templates: insertTemplateReferencesForPages (кросс-workspace guard на дублировании/импорте) без тестов #80

Closed
opened 2026-06-21 02:33:11 +03:00 by Ghost · 0 comments

Найдено в multi-aspect code review всех изменений с коммита 053a9c0d (ветка develop).

Грань: test-coverage · Severity: warning
Где: apps/server/src/core/page/transclusion/transclusion.service.ts:337

Проблема
Новая security-релевантная логика на пути дублирования/импорта (вызов из page.service.ts:835): кандидаты группируются по workspace, выполняется per-workspace existence-запрос, строки вставки пропускают source не из workspace страницы (if (!inWorkspace?.has(sourcePageId)) continue;). Та же гарантия «нет кросс-workspace ребра», что и в syncPageTemplateReferences, но отдельный путь (multi-workspace map, без диффа против существующих). Спеки покрывают только syncPageTemplateReferences; ветка отбрасывания и группировка не покрыты — регрессия с протечкой кросс-workspace вставки прошла бы CI. (Сейчас вдобавок не исполняется из-за TS2554 — см. issue про спеки transclusion.)

Предлагаемый фикс
Юнит-тест (стиль db-стабов из page-template-access.spec.ts): страницы из двух workspace с in- и cross-workspace эмбедами; проверить, что insertMany получает только in-workspace строки и workspaceId каждой строки равен workspace хост-страницы.

Найдено в multi-aspect code review всех изменений с коммита `053a9c0d` (ветка develop). **Грань:** test-coverage · **Severity:** warning **Где:** `apps/server/src/core/page/transclusion/transclusion.service.ts:337` **Проблема** Новая security-релевантная логика на пути дублирования/импорта (вызов из page.service.ts:835): кандидаты группируются по workspace, выполняется per-workspace existence-запрос, строки вставки пропускают source не из workspace страницы (`if (!inWorkspace?.has(sourcePageId)) continue;`). Та же гарантия «нет кросс-workspace ребра», что и в syncPageTemplateReferences, но отдельный путь (multi-workspace map, без диффа против существующих). Спеки покрывают только syncPageTemplateReferences; ветка отбрасывания и группировка не покрыты — регрессия с протечкой кросс-workspace вставки прошла бы CI. (Сейчас вдобавок не исполняется из-за TS2554 — см. issue про спеки transclusion.) **Предлагаемый фикс** Юнит-тест (стиль db-стабов из page-template-access.spec.ts): страницы из двух workspace с in- и cross-workspace эмбедами; проверить, что insertMany получает только in-workspace строки и workspaceId каждой строки равен workspace хост-страницы.
Ghost closed this issue 2026-06-21 03:02:12 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: vvzvlad/gitmost#80