generated from coulomb/repo-seed
68 lines
2.1 KiB
Markdown
68 lines
2.1 KiB
Markdown
# CMIS Profiled Access Points Implementation
|
|
|
|
Date: 2026-05-06
|
|
|
|
Status: profile and mapper slices implemented.
|
|
|
|
## Implemented Slice
|
|
|
|
`src/kontextual_engine/core/cmis.py` defines the CMIS profile and access-point
|
|
boundary used by the future API adapter:
|
|
|
|
- `CMISBinding`
|
|
- `CMISCapability`
|
|
- `CMISAction`
|
|
- `CMISAccessProfile`
|
|
- `CMISAccessPoint`
|
|
- `CMISDomainMapper`
|
|
- `CMISObjectProjection`
|
|
|
|
The layer is intentionally small. It decides whether a CMIS action is allowed
|
|
for a profile and whether an engine asset may be exposed through an access
|
|
point. It does not implement CMIS routes and does not duplicate asset storage,
|
|
metadata, relationship, policy, or audit services.
|
|
|
|
## Built-In Profiles
|
|
|
|
- `readonly-browser`: Browser Binding read profile over public/internal assets.
|
|
- `governed-authoring`: Browser Binding profile with selected create/update
|
|
and content stream mutations.
|
|
- `admin-export`: service-account-only export profile with broad visibility.
|
|
- `compat-tck`: Browser Binding profile intended for selected OpenCMIS TCK
|
|
compatibility tests.
|
|
|
|
## Enforcement Boundary
|
|
|
|
Profiles can restrict exposure by:
|
|
|
|
- CMIS capability,
|
|
- mutation allowance,
|
|
- actor type,
|
|
- sensitivity,
|
|
- asset type,
|
|
- topic,
|
|
- source system,
|
|
- metadata deny rules.
|
|
|
|
Decisions return existing `PolicyDecision` objects so later CMIS routes can
|
|
emit compatible diagnostics and audit records without inventing another policy
|
|
model.
|
|
|
|
## Mapper Slice
|
|
|
|
`CMISDomainMapper` projects existing engine state into CMIS-shaped envelopes:
|
|
|
|
- repository info and CMIS 1.1 Browser Binding capability flags,
|
|
- base type definitions for document, folder, relationship, policy, item, and
|
|
secondary,
|
|
- engine assets as CMIS document projections,
|
|
- representation metadata as content stream descriptors,
|
|
- asset versions as CMIS version properties,
|
|
- relationship primitives as CMIS relationship objects,
|
|
- profile-derived allowable actions.
|
|
|
|
The mapper returns `None` for assets or relationships that the access-point
|
|
profile must not expose. It does not fetch from repositories directly; callers
|
|
provide the asset, representations, versions, metadata records, and
|
|
relationships they have already authorized or loaded.
|