关于 platform-sharing-owd-configure
用于查询和更新 Salesforce 标准对象及自定义对象组织范围默认值(OWD)的技能。它引导管理员验证访问级别、修改和部署元数据并核实结果,同时遵守对象特定的限制。
主要功能
- 01查询当前 OWD 设置
- 02更新内部和外部访问级别
- 03验证访问级别及约束
- 04部署并核实元数据变更
- 05限制重试次数并处理部署失败
适用场景
- 01检查对象的共享默认设置
- 02收紧或放宽记录基准访问权限
- 03部署后核实 OWD 变更
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill platform-sharing-owd-configure安装后在 Claude Code 中输入/platform-sharing-owd-configure确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
examples/get_owd_output.mdupdate_owd_output.mdreferences/access_levels.mdmetadata_api_approach.md详细介绍
管理组织范围默认设置
获取和更新 Salesforce 组织中标准对象和自定义对象的组织范围默认(OWD)共享设置。OWD 定义用户对自己不拥有的记录所具有的基准访问权限。
范围
- 范围内:获取当前 OWD 设置,更新标准对象和自定义对象的内部/外部访问级别
- 范围外:共享规则、角色层级配置、手动共享、权限集、基于条件的共享 — 转交给相应技能
澄清问题
如果情况尚不明确,请在继续前向用户确认:
- 要获取或更新哪些对象的 OWD 设置?
- 要设置什么访问级别?(Private、Public Read Only、Public Read/Write、Controlled by Parent)
- 需要同时更改内部和外部访问权限,还是只更改其中一项?
必需输入
继续前收集或推断以下信息:
- 目标组织:要查询/更新的组织别名或用户名(未指定时使用默认组织)
- 对象名称:标准对象 API 名称(例如,
Account、Contact)或自定义对象 API 名称(例如,Invoice__c) - 操作:Get(获取当前设置)或 Update(更改访问级别)
- 访问级别(用于更新):内部访问权限和/或外部访问权限的值
未指定时的默认值:
- 使用默认的已连接组织
- 如果只提供一个访问级别,则假定该级别适用于内部访问
工作流
所有步骤均按顺序执行。不得跳过或调整顺序。
阶段 1 — 获取当前设置
-
使用 Salesforce CLI Tooling API 查询当前 OWD 设置:
sf data query --query "SELECT QualifiedApiName, InternalSharingModel, ExternalSharingModel FROM EntityDefinition WHERE QualifiedApiName = '<ObjectName>'" --use-tooling-api --target-org <org> -
一次性获取所有 OWD 设置:
sf data query --query "SELECT QualifiedApiName, InternalSharingModel, ExternalSharingModel FROM EntityDefinition WHERE IsCustomizable = true ORDER BY QualifiedApiName" --use-tooling-api --target-org <org> -
清晰展示结果 — 阅读
references/access_levels.md了解有效值,并向用户展示格式化表格。
阶段 2 — 更新设置(如有请求)
-
检查是否为不可变/固定的 OWD — 阅读
references/access_levels.md中的“不可变/固定 OWD 对象”部分。如果请求更改的目标是固定值(例如价格手册的外部 OWD),立即停止,并向用户说明该值由平台固定,无法通过任何方式更改。不要尝试部署。 -
验证请求的访问级别 — 阅读
references/access_levels.md,确认该值对目标对象有效。如果该值不在该对象允许的值范围内,请说明哪些值有效,并请用户选择一个。不要猜测其他可选值。 -
使用 Metadata API 检索对象元数据(标准对象和自定义对象使用相同命令):
sf project retrieve start --metadata CustomObject:<ObjectName> --target-org <org>。此操作会检索包含<sharingModel>和<externalSharingModel>的<ObjectName>.object-meta.xml。完整流程请参阅references/metadata_api_approach.md。 -
修改共享设置 — 更新对象
.object-meta.xml中的<sharingModel>(内部访问)和/或<externalSharingModel>(外部访问)。详情请阅读references/metadata_api_approach.md。 -
部署前验证 — 部署前确认:
- 外部访问权限不比内部访问权限更宽松
- 具有主从关系的对象使用
ControlledByParent - 请求的访问级别对目标对象有效(参见
references/access_levels.md) - 满足跨对象约束(参见
references/access_levels.md中的“跨对象约束”) - 目标字段未列于
references/access_levels.md的不可变/固定列表中
-
部署更新后的设置:
sf project deploy start --metadata CustomObject:<ObjectName> --target-org <org>。 -
处理部署失败(最多尝试 2 次): 如果部署失败:
- 阅读错误消息并找出根本原因。
- 如果错误表明该值对对象无效或不受支持,停止 — 向用户报告失败情况,并提供确切的错误消息,说明哪些操作可行、哪些不可行。除非用户明确请求其他有效值,否则不要尝试替代值。
- 如果错误是暂时性的(网络超时、身份验证过期),重试一次。
- 对同一更改,部署总次数不得超过 2 次。 失败 2 次后,报告错误,丢弃本地编辑(
sf project retrieve start --metadata CustomObject:<ObjectName> --target-org <org>),并询问用户如何继续。
-
验证更改 — 重新运行阶段 1 第 1 步中的查询。
规则 / 限制
| 限制 | 原因 |
|---|---|
具有主从关系的对象必须使用 ControlledByParent | 平台会强制执行,尝试使用其他值会失败 |
| 外部访问权限不能比内部访问权限更宽松 | Salesforce 会拒绝外部权限高于内部权限的配置 |
| 某些对象的组织级默认值(OWD)不可变或固定(例如,Price Book 的外部访问、User、Activity 的外部访问) | 这些设置由平台强制执行——应提前说明无法更改,绝不要尝试部署 |
Price Book 的内部 OWD 仅接受 Use(ReadSelect)或 No Access(None);外部访问始终为 None | Price Book 不接受标准访问级别(Private/Read/ReadWrite) |
| 将 OWD 改得更严格会触发共享重新计算 | 在大型组织中可能需要很长时间——应提醒用户 |
创建自定义对象时,默认值为 Public Read/Write | 用户可能没有意识到默认设置权限较宽松 |
对于托管软件包中的自定义对象,使用包含命名空间前缀的完整 API 名称(例如,ns__Object__c) | 带命名空间前缀的对象在查询和元数据检索时都需要此前缀 |
| 查询前始终验证组织连接 | 避免令人困惑的错误消息 |
| 每次更改最多尝试部署 2 次 | 避免无限重试循环——失败 2 次后停止并向用户报告 |
注意事项
| 问题 | 解决方法 |
|---|---|
更新时出现 INSUFFICIENT_ACCESS 错误 | 用户需要 Manage Sharing 权限或 System Administrator 配置文件 |
| OWD 更改似乎卡住 | 正在运行共享重新计算——在 Setup > Sharing Settings 中查看进度 |
| 查询中找不到自定义对象 | 使用包含 __c 后缀的完整 API 名称 |
ControlledByParent 不可用 | 对象没有主从关系——使用 Private、Public Read Only 或 Public Read/Write |
| 未显示外部访问字段 | 只有启用了外部组织级默认值时,才会显示外部共享模型 |
| 查询没有返回结果 | 对象可能不可自定义,或者 API 名称有误——请检查拼写 |
| 部署时因 Price Book 值无效而失败 | Price Book 仅接受 Use/None(内部),外部访问固定为 None——不要尝试其他值重试,应向用户说明 |
输出要求
交付内容:
- 对于获取操作:提供格式化表格,显示对象名称、内部访问级别和外部访问级别
- 对于更新操作:确认更改,并提供更改前后的对比
跨技能集成
| 需求 | 委派给 |
|---|---|
| 限制 OWD 后创建共享规则 | platform-sharing-rules-generate 技能 |
| 将元数据更改部署到另一个组织 | platform-metadata-deploy 技能 |
参考文件索引
| 文件 | 何时阅读 |
|---|---|
references/access_levels.md | 验证或说明 OWD 访问级别值时 |
references/metadata_api_approach.md | 使用 Metadata API 而非 Tooling API 更新 OWD 时 |
examples/get_owd_output.md | 验证格式化输出是否符合预期结构 |
examples/update_owd_output.md | 验证更新确认是否符合预期结构 |