feat(N3): Backend respektiert X-Workspace-ID bei Listen — contacts/dms/mail/calendar + Frontend-Defaults #367

Closed
opened 2026-09-01 08:26:41 +00:00 by Leopoldadmin · 0 comments
Owner

N3 — Erste vier Module integrieren (Phase N)

Roadmap: PLATFORM_ROADMAP.md → Phase N, Task N3 | Milestone: Phase N — Workspace-Scopes (#14) | Label: task

Umsetzung

Core-Resolver + Dependency:

  • resolve_workspace_scope() (workspace_scope_service.py): X-Workspace-ID → Workspace-Check (aktiv, Tenant) → Zuweisungs-Check → Modul-config; leere Dimensionswerte fallen weg. Exemptions: System-Admins + workspaces:configure_modules-Inhaber (Editor-Deadlock: der N2-Scope-Editor lädt Wertoptionen über dieselben Endpoints).
  • require_workspace_scope(module_key) FastAPI-Dependency (deps.py) — Header-Parsing gekapselt, Routes bleiben schlank.
  • expand_folder_scope(): Ordner-Subtree-Auflösung (self + descendants, zyklensicher) für ContactFolder + DMS Folder.
  • scope_uuid_set(): UUID-Mengen mit fail-closed-Semantik (garbage UUIDs → leere Menge).

Modul-Filter (additive UND-Einschränkung, kein Umbau bestehender Routes):

  • contacts: folder_ids (Subtree) + contact_types; List-Cache wird bei aktivem Scope deaktiviert (Cache-Leak-Gefahr beseitigt)
  • dms: folder_ids (Subtree) auf /files + /folders (Baum reduziert), file_types semantische Matcher (pdf/image/spreadsheet/word/other)
  • mail: account_ids auf /mails, /threads, /accounts (Picker)
  • calendar: calendar_ids auf /calendar/entries + /calendars (Picker)

Frontend-Defaults (Workspace-Kontext):

  • getModuleConfig(moduleKey) im workspaceStore (+3 Tests)
  • ContactsList: wendet default_saved_view_id beim Mount an (admin-definierte Standard-Ansicht)
  • Calendar: setzt default_view (day/week/month/range) beim Workspace-Wechsel

Verifikation

  • TDD: tests/test_n3_workspace_filtering.py 21/21 (Resolver 7, Contacts 5 inkl. Cache-Bypass-Beweis + scharfem AND-Beweis, DMS 3, Mail 3, Calendar 3 inkl. Admin-Bypass)
  • Regression: N1+N2-Suites + test_mail 81 passed
  • Cross-Plugin-Checker: 0 Verstöße; Ruff: nur per Stash bewiesener Vorbestand
  • Frontend: tsc clean, Vitest (Store+CalendarPage+ContactsList) 3/3 grün, Build OK
## N3 — Erste vier Module integrieren (Phase N) **Roadmap:** PLATFORM_ROADMAP.md → Phase N, Task N3 | **Milestone:** Phase N — Workspace-Scopes (#14) | **Label:** task ### Umsetzung **Core-Resolver + Dependency:** - `resolve_workspace_scope()` (workspace_scope_service.py): X-Workspace-ID → Workspace-Check (aktiv, Tenant) → Zuweisungs-Check → Modul-config; leere Dimensionswerte fallen weg. Exemptions: System-Admins + workspaces:configure_modules-Inhaber (Editor-Deadlock: der N2-Scope-Editor lädt Wertoptionen über dieselben Endpoints). - `require_workspace_scope(module_key)` FastAPI-Dependency (deps.py) — Header-Parsing gekapselt, Routes bleiben schlank. - `expand_folder_scope()`: Ordner-Subtree-Auflösung (self + descendants, zyklensicher) für ContactFolder + DMS Folder. - `scope_uuid_set()`: UUID-Mengen mit fail-closed-Semantik (garbage UUIDs → leere Menge). **Modul-Filter (additive UND-Einschränkung, kein Umbau bestehender Routes):** - contacts: folder_ids (Subtree) + contact_types; List-Cache wird bei aktivem Scope deaktiviert (Cache-Leak-Gefahr beseitigt) - dms: folder_ids (Subtree) auf /files + /folders (Baum reduziert), file_types semantische Matcher (pdf/image/spreadsheet/word/other) - mail: account_ids auf /mails, /threads, /accounts (Picker) - calendar: calendar_ids auf /calendar/entries + /calendars (Picker) **Frontend-Defaults (Workspace-Kontext):** - `getModuleConfig(moduleKey)` im workspaceStore (+3 Tests) - ContactsList: wendet default_saved_view_id beim Mount an (admin-definierte Standard-Ansicht) - Calendar: setzt default_view (day/week/month/range) beim Workspace-Wechsel ### Verifikation - TDD: tests/test_n3_workspace_filtering.py **21/21** (Resolver 7, Contacts 5 inkl. Cache-Bypass-Beweis + scharfem AND-Beweis, DMS 3, Mail 3, Calendar 3 inkl. Admin-Bypass) - ✅ Regression: N1+N2-Suites + test_mail **81 passed** - ✅ Cross-Plugin-Checker: 0 Verstöße; Ruff: nur per Stash bewiesener Vorbestand - ✅ Frontend: tsc clean, Vitest (Store+CalendarPage+ContactsList) 3/3 grün, Build OK
Leopoldadmin added this to the Phase N — Workspace-Scopes milestone 2026-09-01 08:26:49 +00:00
Leopoldadmin added the task label 2026-09-01 08:26:49 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Leopoldadmin/leocrm#367