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 設定を取得または更新するオブジェクトはどれですか?
  • 設定するアクセスレベルはどれですか?(非公開、公開読み取り専用、公開読み取り/書き込み、親レコードによる制御)
  • 内部アクセスと外部アクセスの両方を変更する必要がありますか、それとも片方だけですか?

必要な入力

作業を進める前に、以下を収集するか推測してください。

  • 対象組織:クエリまたは更新する組織のエイリアスまたはユーザー名(指定がない場合はデフォルト組織を使用)
  • オブジェクト名:標準オブジェクトの API 名(例:Account、Contact)またはカスタムオブジェクトの API 名(例:Invoice__c)
  • 操作:取得(現在の設定を取得)または更新(アクセスレベルを変更)
  • アクセスレベル(更新の場合):内部アクセスおよび/または外部アクセスの値

指定がない場合のデフォルト:

  • デフォルトの接続済み組織を使用します
  • アクセスレベルが 1 つだけ指定された場合は、内部アクセスに適用されるものとします

ワークフロー

すべての手順を順番に実行してください。省略したり、順序を変更したりしないでください。

フェーズ 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 の「Immutable / Fixed OWD Objects」セクションを読みます。依頼された変更が固定値(例:Price Book の外部 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 の「Cross-Object Constraints」を参照)
    • 対象の項目が references/access_levels.md で変更不可/固定として記載されていない
  6. 更新した設定をデプロイします:sf project deploy start --metadata CustomObject:<ObjectName> --target-org <org>。

  7. デプロイの失敗に対処する(最大 2 回):デプロイに失敗した場合:

    • エラーメッセージを読み、根本原因を特定します。
    • エラーが、そのオブジェクトで値が無効またはサポート対象外であることを示している場合は、停止します。正確なエラーメッセージとともに失敗をユーザーに報告し、何が可能で何が不可能かを説明します。ユーザーが別の有効な値を明示的に依頼しない限り、代替値を試してはいけません。
    • エラーが一時的なもの(ネットワークのタイムアウト、認証の期限切れ)であれば、1 回だけ再試行します。
    • 同じ変更に対して、合計 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)のみです。外部アクセスは常に None です標準のアクセスレベル(Private/Read/ReadWrite)は Price Book では無効です
OWD をより制限的な設定に変更すると、共有の再計算が実行されます大規模な組織ではかなり時間がかかる場合があるため、ユーザーに警告してください
カスタムオブジェクトは作成時に Public Read/Write がデフォルトになりますデフォルト設定が許可的であることにユーザーが気付いていない場合があります
管理パッケージのカスタムオブジェクトには、名前空間のプレフィックスを含む完全な API 名(例:ns__Object__c)を使用してください名前空間付きのオブジェクトでは、クエリとメタデータの取得の両方でプレフィックスが必要です
クエリを実行する前に、必ず組織への接続を確認してください分かりにくいエラーメッセージを防げます
変更ごとのデプロイ試行は最大 2 回です無制限の再試行ループを防ぎます。2 回失敗したら停止し、ユーザーに報告してください

注意点

問題解決方法
更新時に INSUFFICIENT_ACCESS エラーが発生するユーザーには「共有の管理」権限またはシステム管理者プロファイルが必要です
OWD の変更が停止しているように見える共有の再計算が実行中です。設定 > 共有設定で進行状況を確認してください
クエリでカスタムオブジェクトが見つからない__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.mdOWD のアクセスレベル値を検証または説明するとき
references/metadata_api_approach.mdTooling API ではなく Metadata API を使用して OWD を更新するとき
examples/get_owd_output.md書式設定された出力が想定される構造と一致するか確認するとき
examples/update_owd_output.md更新完了の確認内容が想定される構造と一致するか確認するとき

コメント