mcpField
P
platform-sharing-owd-configure

platform-sharing-owd-configure

github.com/forcedotcom安全1.1k3.8k 次安装1 天前更新
代码仓库

关于 platform-sharing-owd-configure

用于查询和更新 Salesforce 标准对象及自定义对象组织范围默认值(OWD)的技能。它引导管理员验证访问级别、修改和部署元数据并核实结果,同时遵守对象特定的限制。

主要功能

  1. 01查询当前 OWD 设置
  2. 02更新内部和外部访问级别
  3. 03验证访问级别及约束
  4. 04部署并核实元数据变更
  5. 05限制重试次数并处理部署失败

适用场景

  1. 01检查对象的共享默认设置
  2. 02收紧或放宽记录基准访问权限
  3. 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.md
update_owd_output.md
references/
access_levels.md
metadata_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 — 获取当前设置
  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>

  2. 一次性获取所有 OWD 设置: sf data query --query "SELECT QualifiedApiName, InternalSharingModel, ExternalSharingModel FROM EntityDefinition WHERE IsCustomizable = true ORDER BY QualifiedApiName" --use-tooling-api --target-org <org>

  3. 清晰展示结果 — 阅读 references/access_levels.md 了解有效值,并向用户展示格式化表格。

阶段 2 — 更新设置(如有请求)
  1. 检查是否为不可变/固定的 OWD — 阅读 references/access_levels.md 中的“不可变/固定 OWD 对象”部分。如果请求更改的目标是固定值(例如价格手册的外部 OWD),立即停止,并向用户说明该值由平台固定,无法通过任何方式更改。不要尝试部署。

  2. 验证请求的访问级别 — 阅读 references/access_levels.md,确认该值对目标对象有效。如果该值不在该对象允许的值范围内,请说明哪些值有效,并请用户选择一个。不要猜测其他可选值。

  3. 使用 Metadata API 检索对象元数据(标准对象和自定义对象使用相同命令):sf project retrieve start --metadata CustomObject:<ObjectName> --target-org <org>。此操作会检索包含 <sharingModel> 和 <externalSharingModel> 的 <ObjectName>.object-meta.xml。完整流程请参阅 references/metadata_api_approach.md。

  4. 修改共享设置 — 更新对象 .object-meta.xml 中的 <sharingModel>(内部访问)和/或 <externalSharingModel>(外部访问)。详情请阅读 references/metadata_api_approach.md。

  5. 部署前验证 — 部署前确认:

    • 外部访问权限不比内部访问权限更宽松
    • 具有主从关系的对象使用 ControlledByParent
    • 请求的访问级别对目标对象有效(参见 references/access_levels.md)
    • 满足跨对象约束(参见 references/access_levels.md 中的“跨对象约束”)
    • 目标字段未列于 references/access_levels.md 的不可变/固定列表中
  6. 部署更新后的设置: sf project deploy start --metadata CustomObject:<ObjectName> --target-org <org>。

  7. 处理部署失败(最多尝试 2 次): 如果部署失败:

    • 阅读错误消息并找出根本原因。
    • 如果错误表明该值对对象无效或不受支持,停止 — 向用户报告失败情况,并提供确切的错误消息,说明哪些操作可行、哪些不可行。除非用户明确请求其他有效值,否则不要尝试替代值。
    • 如果错误是暂时性的(网络超时、身份验证过期),重试一次。
    • 对同一更改,部署总次数不得超过 2 次。 失败 2 次后,报告错误,丢弃本地编辑(sf project retrieve start --metadata CustomObject:<ObjectName> --target-org <org>),并询问用户如何继续。
  8. 验证更改 — 重新运行阶段 1 第 1 步中的查询。


规则 / 限制

限制原因
具有主从关系的对象必须使用 ControlledByParent平台会强制执行,尝试使用其他值会失败
外部访问权限不能比内部访问权限更宽松Salesforce 会拒绝外部权限高于内部权限的配置
某些对象的组织级默认值(OWD)不可变或固定(例如,Price Book 的外部访问、User、Activity 的外部访问)这些设置由平台强制执行——应提前说明无法更改,绝不要尝试部署
Price Book 的内部 OWD 仅接受 Use(ReadSelect)或 No Access(None);外部访问始终为 NonePrice 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验证更新确认是否符合预期结构

评论

支持 Markdown