外观
领域模型
目标:用一张关系图 + 逐对象说明,建立 ATKONBASE 核心对象的整体认识。读完你应能回答:文档存在哪、版本怎么来、字段挂在谁身上、权限怎么传递、租户怎么隔离。
ATKONBASE 的内容世界由九个核心对象组成。它们分两类:
- 内容主干(运行时实例):Tenant → Container → Document → Version → 二进制流。
- 结构声明(schema 层):ContentType → Field → Template,描述「内容长什么样」。
两类通过 ContentType 与 ACL / Lifecycle 交织在一起。
关系总览
Tenant(租户:硬隔离边界)
└─ Container(容器:层级树,内容的归属单元,ACL 继承的起点)
└─ Document(文档:内容对象,归属某个容器,声明为某个 ContentType)
└─ Version(版本:每次上传产生一个版本,构成版本链)
└─ 二进制流(Blob:版本指向的实际字节,带 contentHash / sizeBytes)
ContentType(内容类型:声明式 schema,可有父类型)
├─ Field(字段定义:attributeKey + valueType + cardinality)
└─ Template(模板:字段的分组,绑定到类型)
ACL(访问控制:resource + grantee + role,沿 Container→Document 继承)
Lifecycle(生命周期:ACTIVE / ARCHIVED / TRASHED 状态机)逐对象说明
Tenant(租户)
多租户硬隔离的顶层边界。每个集成方客户对应一个或多个租户;租户之间数据相互隔离,互不可见,一套服务底座支撑多个客户与业务线。租户开通是管理动作(不在 V1 自助范围内),集成时由运营准备好后告知集成方租户标识。V1 调用拿到 token 后,tenantId 由凭据在服务端解码得到,集成方无需在后续请求里回传。
Container(容器)
内容的归属单元,组织成层级树。文档必须归属于某个容器。容器是 ACL 继承的起点——在容器上授一次权,其下文档层层生效(继承解析规则属于 ACL 模式篇主题)。容器树按集成方的业务结构组织(如「客户 / 项目 / 合同」层级),具体怎么建是集成方的业务建模决策。
Document(文档)
内容对象本身,归属于一个容器,并声明为某个 ContentType。文档是元数据值与 ACL 授权的挂载目标(资源类型 DOCUMENT)。文档不直接持有字节——字节在它的版本里。
Version(版本)
文档的每次内容写入产生一个版本,多个版本构成版本链。新建文档时上传 API 创建第 1 版;对已有文档再次上传即追加新版本(versionNo 递增)。版本携带 contentHash(内容 SHA-256)、sizeBytes、mimeType 等。ContentType 上可声明版本保留策略(maxVersionCount / retentionDays,null 表示不限)。
二进制流(Blob)
版本指向的实际字节内容。相同内容的字节(contentHash 一致)只占用一份存储,多个版本可共享同一份本体。二进制的读写走文件上传 / 下载链路;大文件走分片上传三段式(不在入门范围)。
ContentType(内容类型)
声明式 schema 的核心——描述「这一类内容有哪些字段、什么约束、什么版本策略」。类型可有父类型(parentTypeId,null = 根类型),形成类型层级。系统内置类型(如 document_root)的 code 用 snake_case;业务自定义类型的建模由集成方决定。
Field(字段定义)
挂在内容上的业务字段,对外稳定标识是 attributeKey(租户内唯一、跨环境不变),而非随环境变化的 fieldId。字段有类型(valueType:STRING / INTEGER / DECIMAL / BOOLEAN / DATE / DATETIME)与基数(cardinality:SINGLE / MULTI)。字段值如何按类型编码、null 怎么解读,见字段值编码契约。
⚠️ 同一套类型枚举,在不同位置字段名不同:metadata 值响应里叫
dataType,schema 定义里叫valueType——指的是同一套枚举,请勿混用。
Template(模板)
字段的分组载体,绑定到 ContentType。模板让一组相关字段成套复用,是 schema 层的组织手段。
ACL(访问控制)
授权三段式:资源(resource,类型 DOCUMENT / CONTAINER)+ 被授权方(grantee,类型 USER / ROLE / DEPARTMENT)+ 角色(role:VIEWER / EDITOR / MANAGER,或自定义 permissionMask 位组合)。授权沿 Container → Document 继承。
granteeId是 ATKONBASE 内的稳定 ID(业务用户 / 角色 / 部门 ID),不是 IdP 侧的 unionId / sub / employeeNo,也不是集成方业务系统的原始用户主键。
Lifecycle(生命周期)
文档的状态机:ACTIVE(活跃)/ ARCHIVED(归档)/ TRASHED(回收)。状态流转与生命周期钩子承接集成方的内容业务流程;具体的业务流程编排(审批、流转)由集成方在上层实现,ATKONBASE 只提供状态机与投影端点。