本文档由 石墨办公 提供。
permissions 可能完全不同,回调里要按 X-Weboffice-Token 解出的 uid 区分计算。GET {endpoint_url}/users/current/info
Header: X-Weboffice-Token: <前端传入的 token>{
"id": "userid123",
"name": "张三",
"avatar": "https://example.com/user-123.png",
"email": "user123@example.com",
"teamGuid": "team_001"
}X-Weboffice-Token 解出的 uid 和接入方业务库里的人对不上,所有权限字段都没意义。GET {endpoint_url}/files/{fileId}
Header: X-Weboffice-Token: <前端传入的 token>{
"id": "doc_38291",
"name": "Q3 战略规划",
"type": "documentPro",
"permissions": {
"readable": true,
"editable": true,
"commentable": true,
"copyable": true,
"exportable": true,
"manageable": false,
"copyablePasteClipboard": true,
"attachmentCopyable": true,
"cutable": true,
"attachmentPreviewable": true,
"attachmentDownloadable": true,
"imageDownloadable": true
},
"creatorId": "userid123",
"createdAt": "2026-04-01T08:00:00Z",
"updatedAt": "2026-04-02T09:30:00Z",
"teamGuid": "team_001"
}| 字段 | 必填 | 默认值 | 含义 | 影响 |
|---|---|---|---|---|
readable | 是 | — | 能否打开文档 | false 时编辑器拒绝加载 |
editable | 是 | — | 能否编辑正文 | false 时编辑器进入只读模式 |
commentable | 是 | — | 能否评论 / 回复 | 控制评论区开关 |
copyable | 是 | — | 能否复制文档内容 | false 时禁用复制 / 剪切 |
exportable | 是 | — | 能否导出文档 | 控制导出菜单 |
manageable | 是 | — | 是否为管理者 | 见下文管理者权限说明 |
copyablePasteClipboard | 否 | true | 能否把内容粘贴到文档外 | 只有 copyable: true 时才会生效 |
attachmentCopyable | 否 | true | 能否复制附件 | — |
cutable | 否 | true | 能否剪切内容 | — |
attachmentPreviewable | 否 | true | 能否预览附件 | — |
attachmentDownloadable | 否 | true | 能否下载附件 | — |
imageDownloadable | 否 | true | 能否下载图片 | — |
true,只在需要细粒度限制时显式返回 false。manageable: true 的影响范围(来自官方文档):true。true。true 才能导出锁定内容。manageable: true。editable = true 时 copyable 必须为 true(官方明确约束)。可以编辑就必然可以读到内容,禁止复制没有实际意义。readable = false 时其它字段全部应当为 false,没必要也不应该给"看不到的人"任何子权限。copyablePasteClipboard = true 前提是 copyable = true。否则石墨会忽略这个高级权限。manageable 与其它字段在逻辑上独立 —— 管理者不必然可读,可读者也不必然是管理者;但实践中"非可读用户却是管理者"几乎不会出现。| 角色 / 状态 | readable | editable | commentable | copyable | exportable | manageable |
|---|---|---|---|---|---|---|
| 文档所有者 / 管理员 | true | true | true | true | true | true |
| 普通编辑者 | true | true | true | true | true | false |
| 评论者(只读 + 评论) | true | false | true | true | true | false |
| 只读用户 | true | false | false | true | true | false |
| 无权访问 / 被拒绝 | false | false | false | false | false | false |
readable: true, editable: false, copyable: false, exportable: false, copyablePasteClipboard: false。creatorId 不要写成"当前登录用户",应该写文件的真正创建者,否则换人打开后 manageable 行为会乱。| 误区 | 实际影响 | 正确做法 |
|---|---|---|
| 创建文档时把权限写死、回调时原样返回 | 权限变化失效 | 回调里实时按业务规则算 |
editable: true 但 copyable: false | 违反官方约束,行为未定义 | 始终保证 editable → copyable |
用文件创建者作为"管理者",但 creatorId 字段填了打开者 | 任何人都成了管理者 | creatorId 必须是真正创建者 |
| 不区分用户:所有人返回同一份 permissions | 越权 / 误授权 | 必须基于 X-Weboffice-Token 解出的 uid 区分计算 |
| 把高级权限当必填字段返回 false | 文档功能被无意关闭 | 不需要限制时不传,让石墨用默认 true |
| 业务库权限改了,但元信息回调里读的是冷缓存 | 用户看到的还是旧权限 | 回调直接读源数据;缓存 TTL ≤ 30s 或主动失效 |
协同文档元信息回调和预览文档共用 URL 但没按 type 区分 | 协同文档退化为预览,缺字段 | 按 type 分发两套返回结构 |
fileId,记录回调入参(X-Weboffice-Token)和回调返回的 permissions 全量permissions 是否与业务期望一致editable: true ↔ copyable: true 始终成立creatorId 在所有用户视角下都指向同一个真实创建者curl 直接调一次回调接口(带正确的 X-Weboffice-Token),确认它对石墨服务端公网可达且返回 200fileId 的多次回调是否走的同一份计算逻辑(防止线上有冷缓存绕开)| 关注点 | 文档 |
|---|---|
| 协同编辑接入完整流程 | 协同编辑接入完整流程 |
| 文件元信息字段全量定义 | 获取文件元信息-协同文档 |
| 当前用户信息字段定义 | 获取当前用户信息 |
| Token 透传与解析 | 签名凭证-Token |
| 接入排查思路 | 文件预览失败排查指南(链路通用) |
editable → copyable、!readable ⇒ 全 false、copyablePasteClipboard ≤ copyable —— 其余按业务规则展开就行。