Files
nexarch/dms/docs/CMIS.md
T
patrickandClaude Sonnet 5 263e2e45fc
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
INT-15: cmis-schnittstelle-auth-tenant-scoping-paritaet-zur-rest-api
Pruefprotokoll und Dokumentation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 00:37:00 +02:00

3.8 KiB

CMIS-Schnittstelle (INT-09, optional)

CMIS 1.1 Browser Binding (JSON) als zusaetzliche Schnittstelle neben der REST-API. Sie hat keine eigene Fachlogik und keine eigenen Rechte: jede CMIS-Anfrage wird in Aufrufe der REST-API uebersetzt, die in-process durch dieselbe Kette laufen wie ein direkter REST-Zugriff (Core-JWT, Rechteentscheidung je Route, Eigentuemer-Regeln, Mandantenpruefung).

Aktivierung

Variable Bedeutung
NEXARCH_DMS_APP_CMIS_ENABLED true schaltet CMIS ein; sonst existiert keine CMIS-Route (404)
NEXARCH_DMS_APP_TENANT_SLUG Pflicht, ist zugleich die Repository-ID
NEXARCH_DMS_APP_CMIS_PUBLIC_BASE_URL optional, Basis der URLs in der Repository-Info (Standard: aus der Anfrage abgeleitet, inkl. /api/dms/v1)
NEXARCH_DMS_APP_CMIS_MAX_CONTENT_BYTES optional, Obergrenze fuer createDocument (Standard 256 MiB)

Adressen

Alle unter /api/dms/v1/cmis/browser (Authentifizierung wie REST: Authorization: Bearer <Core-JWT>).

Adresse Zweck
GET /cmis/browser Repository-Infos
GET /cmis/browser/{repo} Repository-Info (cmisselector=repositoryInfo, typeDefinition, typeChildren, typeDescendants) und objektbezogene Selektoren mit objectId
GET /cmis/browser/{repo}/root[/pfad] Wurzel- bzw. Pfad-URL: cmisselector=object (Standard), children, parent, content
POST /cmis/browser/{repo}[/root/pfad] cmisaction=createDocument (multipart, Teil content)

succinct=true liefert succinctProperties. maxItems und skipCount gelten fuer children. Die Wurzel (root) ist virtuell: sie enthaelt die Ordner und Dokumente ohne Elternordner.

Unterstuetzt

Repository-Info, die Typen cmis:document und cmis:folder, Objekt lesen (per ID und Pfad), Kinder auflisten, Elternordner, Inhalt lesen (Range-Anfragen moeglich), Dokument anlegen.

Nicht unterstuetzt (Antwort notSupported, 405)

Query, Aendern und Loeschen von Objekten, Ordner anlegen, Inhalt ersetzen, Versionierung (Check-out/-in), ACLs, Change-Log, Relationships, Renditions, getObjectParents, getDescendants/getFolderTree. AtomPub- und Web-Services-Binding gibt es nicht.

Abbildung auf die REST-API

CMIS REST
Objekt (Ordner) GET /folders/{id}
Objekt (Dokument) GET /documents/{id}
Kinder GET /folders/{id}/children und /documents (Wurzel: /folders/children, /folders/documents)
Inhalt GET /documents/{id}/content (bei fertigem PDF-Derivat wird dieses geliefert, die Laenge in den Eigenschaften ist die des Originals)
createDocument POST /uploads, PUT /uploads/{id}/chunk, POST /uploads/{id}/complete

Fehler: HTTP-Status wie in der REST-API, Koerper im CMIS-Format {"exception":"objectNotFound","message":"…"} plus dem Core-Fehlerobjekt error.

Grenzen

  • Ein Objekt-Lookup per ID fragt zuerst den Ordner-, dann den Dokument-Endpunkt. Ein nicht vorhandenes Objekt liefert daher wie in REST 403 (Dokument-Guard), nicht 404.
  • Dokumentlisten eines Ordners (/folders/.../documents) zeigen nur Dokumente des Aufrufers (Eigentuemer-Modell, INT-15); die Ordnerstruktur selbst ist mandantenweit sichtbar, bis Core-RBAC (Gruppen, RBAC-03) vorliegt. CMIS erbt beides unveraendert.
  • Repository-Info und Typdefinitionen verlangen eine Anmeldung, aber keine Fachberechtigung. Die Anmeldung erzwingen dieselben Bausteine wie bei REST (Token-Pruefung der gemeinsamen Kette, im Uebergangsmodus der gemeinsame Guard); der CMIS-Code enthaelt keine eigene Pruefung, ein Test verbietet sie.
  • Ein widerrufenes (nicht abgelaufenes) Token wird erst abgelehnt, wenn Core den Widerruf im Token-Vertrag bereitstellt (Core IAM-17); abgelaufene Token lehnt CMIS wie REST ab.
  • Ein Test mit dem CMIS-Referenzclient (Apache Chemistry OpenCMIS) steht aus, siehe Pruefprotokoll.