From 9e692ce0bfa341e28a1ac01477c32dadbc2ed8d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=8A=E5=9C=AD?= Date: Fri, 21 Aug 2026 16:28:53 +0800 Subject: [PATCH] docs(drive): align get-setting semantics with final GUI wording Sync the get-setting schema descriptions and skill references with the server-side finalized policy texts: policy code semantics now quote the product permission-settings page labels (e.g. external_share=add external collaborators, watermark=show watermark, node_spread_scope= download and distribution scope), the node_spread_scope binary values read ALL_NODES=all documents and PREVIEWABLE_ONLY=previewable documents only (online documents, images, videos, etc.), and the contract test value-semantic fragments follow the same wording. Both mono and multi drive references also list per-policy name/description examples (external_share, node_spread with NOBODY, node_move_forbidden) quoted verbatim from the server i18n single source. --- internal/helpers/drive.go | 4 ++-- internal/helpers/drive_permission_get_setting_test.go | 2 +- skills/mono/references/products/drive.md | 3 ++- skills/multi/dingtalk-drive/references/drive.md | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/internal/helpers/drive.go b/internal/helpers/drive.go index 092926ad..ea48c463 100644 --- a/internal/helpers/drive.go +++ b/internal/helpers/drive.go @@ -2409,10 +2409,10 @@ func newDriveCommand() *cobra.Command { "type":"object", "description":"权限策略项", "properties":{ - "code":{"type":"string","enum":["external_share","external_share_manager_only","member_invite","member_invite_org_only","comment","permission_apply","external_permission_apply","watermark","node_spread","online_content_copy","node_move_forbidden","node_spread_scope"],"description":"external_share=允许分享到组织外;external_share_manager_only=仅管理员可分享到组织外;member_invite=添加成员的角色门槛;member_invite_org_only=仅可添加组织内成员;comment=评论权限门槛;permission_apply=允许申请权限;external_permission_apply=允许组织外用户申请权限;watermark=水印;node_spread=转发/下载等传播的允许门槛;online_content_copy=在线文档内容复制的允许门槛;node_move_forbidden=是否禁止移动节点(ENABLED=禁止移动,DISABLED=允许移动);node_spread_scope=文件夹传播范围(仅文件夹类节点)。"}, + "code":{"type":"string","enum":["external_share","external_share_manager_only","member_invite","member_invite_org_only","comment","permission_apply","external_permission_apply","watermark","node_spread","online_content_copy","node_move_forbidden","node_spread_scope"],"description":"external_share=添加企业外协作者;external_share_manager_only=企业外协作者仅限管理员;member_invite=谁可以添加协作者;member_invite_org_only=仅企业内用户可添加协作者;comment=谁可以评论;permission_apply=权限申请;external_permission_apply=组织外权限申请;watermark=显示水印;node_spread=谁可以下载、创建副本、打印;online_content_copy=谁可以复制文档内容;node_move_forbidden=禁止移动;node_spread_scope=下载与传播生效范围(仅文件夹类节点)。"}, "name":{"type":"string","description":"策略的中文名称,文案与产品权限设置页一致;为确定性字段,只要该策略返回就必带"}, "description":{"type":"string","description":"策略的含义说明,解释该策略管控的行为及各取值的语义;为确定性字段,只要该策略返回就必带"}, - "value":{"type":["string","null"],"description":"取值随策略类型不同:开关型(external_share、external_share_manager_only、member_invite_org_only、permission_apply、external_permission_apply、watermark、node_move_forbidden)为 ENABLED/DISABLED;阈值型(member_invite、comment)为 READER_AND_ABOVE/DOWNLOADER_AND_ABOVE/EDITOR_AND_ABOVE/MANAGER_AND_ABOVE,阈值型(node_spread、online_content_copy)为 DOWNLOADER_AND_ABOVE/EDITOR_AND_ABOVE/MANAGER_AND_ABOVE/NOBODY,均表示不低于该角色才允许对应操作,NOBODY 表示所有人禁止;二值型(node_spread_scope):ALL_NODES=下载与传播限制对所有节点生效,PREVIEWABLE_ONLY=仅对可预览的节点(如在线文档、图片、视频)生效;未知值时为 null"}, + "value":{"type":["string","null"],"description":"取值随策略类型不同:开关型(external_share、external_share_manager_only、member_invite_org_only、permission_apply、external_permission_apply、watermark、node_move_forbidden)为 ENABLED/DISABLED;阈值型(member_invite、comment)为 READER_AND_ABOVE/DOWNLOADER_AND_ABOVE/EDITOR_AND_ABOVE/MANAGER_AND_ABOVE,阈值型(node_spread、online_content_copy)为 DOWNLOADER_AND_ABOVE/EDITOR_AND_ABOVE/MANAGER_AND_ABOVE/NOBODY,均表示不低于该角色才允许对应操作,NOBODY 表示所有人禁止;二值型(node_spread_scope):ALL_NODES=下载与传播限制对所有文档生效,PREVIEWABLE_ONLY=仅对可预览的文档(在线文档、图片视频等)生效;未知值时为 null"}, "inherited":{"type":["boolean","null"],"description":"true 表示该策略值继承自上级(父节点/知识库)配置;未下发时为 null"}, "allowedValues":{"type":["array","null"],"items":{"type":"string"},"description":"该策略当前可设置的取值(与 value 同一值域),未下发时为 null"} }, diff --git a/internal/helpers/drive_permission_get_setting_test.go b/internal/helpers/drive_permission_get_setting_test.go index f7ab0f56..49f91fa3 100644 --- a/internal/helpers/drive_permission_get_setting_test.go +++ b/internal/helpers/drive_permission_get_setting_test.go @@ -159,7 +159,7 @@ func TestCrossPlatformCoverageDrivePermissionGetSettingResultContract(t *testing t.Fatalf("value = %#v", itemProperties["value"]) } valueDescription, _ := value["description"].(string) - for _, fragment := range []string{"ENABLED/DISABLED", "READER_AND_ABOVE", "NOBODY", "ALL_NODES", "PREVIEWABLE_ONLY", "不低于该角色才允许", "所有人禁止", "限制对所有节点生效", "仅对可预览的节点"} { + for _, fragment := range []string{"ENABLED/DISABLED", "READER_AND_ABOVE", "NOBODY", "ALL_NODES", "PREVIEWABLE_ONLY", "不低于该角色才允许", "所有人禁止", "限制对所有文档生效", "仅对可预览的文档"} { if !strings.Contains(valueDescription, fragment) { t.Fatalf("value description missing %q: %s", fragment, valueDescription) } diff --git a/skills/mono/references/products/drive.md b/skills/mono/references/products/drive.md index 98614bb1..606aa7e5 100644 --- a/skills/mono/references/products/drive.md +++ b/skills/mono/references/products/drive.md @@ -762,7 +762,8 @@ get-setting 返回字段说明: - `permissionMode` — INHERITED(继承上级)/ INDEPENDENT(独立管理),未知时为 null - `shareScope` — `visibility`(PRIVATE/ORGANIZATION/PUBLIC);`partnerIncluded`、`defaultRole`、`canSearch`、`canRecommend` 仅 ORGANIZATION 有意义;`linkShare`:`requirePassword`(密码明文不返回)、`expireAt`/`expireDays`(未设置为 null)、`forCurrentNode` - `policies[]` — 每项含 `code`(策略码)、`name`/`description`(中文名与值语义说明,随行必带)、`value`(当前值)、`inherited`(true=继承上级配置)、`allowedValues`(可设置值域);未下发或不支持的策略不返回;`node_spread_scope` 仅文件夹类节点返回 -- `value` 按策略分型:开关型(external_share、external_share_manager_only、member_invite_org_only、permission_apply、external_permission_apply、watermark、node_move_forbidden)为 ENABLED/DISABLED;member_invite、comment 为 READER/DOWNLOADER/EDITOR/MANAGER_AND_ABOVE(无 NOBODY);node_spread、online_content_copy 为 DOWNLOADER/EDITOR/MANAGER_AND_ABOVE 或 NOBODY(无 READER_AND_ABOVE);node_spread_scope 为 ALL_NODES(限制对所有节点生效)/ PREVIEWABLE_ONLY(仅对可预览的节点生效) +- `value` 按策略分型:开关型(external_share、external_share_manager_only、member_invite_org_only、permission_apply、external_permission_apply、watermark、node_move_forbidden)为 ENABLED/DISABLED;member_invite、comment 为 READER/DOWNLOADER/EDITOR/MANAGER_AND_ABOVE(无 NOBODY);node_spread、online_content_copy 为 DOWNLOADER/EDITOR/MANAGER_AND_ABOVE 或 NOBODY(无 READER_AND_ABOVE);node_spread_scope 为 ALL_NODES(限制对所有文档生效)/ PREVIEWABLE_ONLY(仅对可预览的文档生效) +- `name`/`description` 示例(文案与产品权限设置页一致):external_share「添加企业外协作者」:是否允许添加企业外的人为协作者(ENABLED=允许,DISABLED=禁止);node_spread「谁可以下载、创建副本、打印」:允许哪些角色及以上的用户下载、创建副本、打印;NOBODY=所有人禁止下载、创建副本、打印;node_move_forbidden「禁止移动」:是否禁止移动到其他知识库或团队共享文件夹(ENABLED=禁止移动,DISABLED=允许移动) - 方向语义:NOBODY=该操作对所有人禁止;XXX_AND_ABOVE=不低于该角色才允许 ### 文件互联网公开发布 diff --git a/skills/multi/dingtalk-drive/references/drive.md b/skills/multi/dingtalk-drive/references/drive.md index 807e0ede..179464a2 100644 --- a/skills/multi/dingtalk-drive/references/drive.md +++ b/skills/multi/dingtalk-drive/references/drive.md @@ -80,7 +80,7 @@ dws drive +publish-unset --node 只在意图命中时读取一个精确 leaf Schema。成员变更、转移所有者、发起申请和公开状态变更必须明确节点、用户、角色与影响范围。转移所有者时,在构造最终命令前必须让用户分别明确决定 `--reserve-role ` 和 `--recursive=`;Agent 不得根据默认值、对象类型或便捷性自行选择任一项。两项决策与目标、新所有者均明确后,才按 Runtime confirmation 构造首次正式调用。 -`permission get-setting` 返回 `permissionMode`(INHERITED/INDEPENDENT,未知时为 null)、`shareScope`(可见范围与链接分享,密码明文不返回;`partnerIncluded`、`defaultRole` 等仅 ORGANIZATION 有意义)和 `policies[]`(code/name/description/value/inherited/allowedValues;name/description 为中文名与值语义说明,随行必带;未下发的策略不返回,`node_spread_scope` 仅文件夹)。`value` 按策略分型:开关型为 ENABLED/DISABLED;member_invite、comment 为 READER/DOWNLOADER/EDITOR/MANAGER_AND_ABOVE;node_spread、online_content_copy 为 DOWNLOADER/EDITOR/MANAGER_AND_ABOVE 或 NOBODY;node_spread_scope 为 ALL_NODES(限制对所有节点生效)/ PREVIEWABLE_ONLY(仅对可预览节点生效)。NOBODY=该操作对所有人禁止;XXX_AND_ABOVE=不低于该角色才允许。 +`permission get-setting` 返回 `permissionMode`(INHERITED/INDEPENDENT,未知时为 null)、`shareScope`(可见范围与链接分享,密码明文不返回;`partnerIncluded`、`defaultRole` 等仅 ORGANIZATION 有意义)和 `policies[]`(code/name/description/value/inherited/allowedValues;name/description 为中文名与值语义说明,随行必带;未下发的策略不返回,`node_spread_scope` 仅文件夹)。`value` 按策略分型:开关型为 ENABLED/DISABLED;member_invite、comment 为 READER/DOWNLOADER/EDITOR/MANAGER_AND_ABOVE;node_spread、online_content_copy 为 DOWNLOADER/EDITOR/MANAGER_AND_ABOVE 或 NOBODY;node_spread_scope 为 ALL_NODES(限制对所有文档生效)/ PREVIEWABLE_ONLY(仅对可预览的文档生效)。NOBODY=该操作对所有人禁止;XXX_AND_ABOVE=不低于该角色才允许。name/description 示例(文案与产品权限设置页一致):external_share「添加企业外协作者」:是否允许添加企业外的人为协作者(ENABLED=允许,DISABLED=禁止);node_spread「谁可以下载、创建副本、打印」:允许哪些角色及以上的用户下载、创建副本、打印;NOBODY=所有人禁止下载、创建副本、打印;node_move_forbidden「禁止移动」:是否禁止移动到其他知识库或团队共享文件夹(ENABLED=禁止移动,DISABLED=允许移动)。 发起权限申请先只读执行 `permission apply-info`。正式 `permission apply` 会通知审批人;调用前必须向用户逐项回显并确认资源、申请角色、审批人和理由。Agent 不得默认选择第一位审批人、最高/最低角色或代写申请理由;用户未明确同意完整申请内容时停在确认环节。