共有の理解
共有は、すべてのカスタムオブジェクトと、Account、Contact、Opportunity、Case などの多くの標準オブジェクトのレコードレベルのアクセス制御を実現します。管理者は最初にオブジェクトの組織の共有アクセスレベルを設定し、レコード所有者、ロール階層、共有ルール、共有の直接設定などに基づいてその他のアクセス権を付与します。開発者は Apex 共有管理を使用できるようになり、Apex を使用したプログラムからのアクセス権の付与が可能になります。
レコードに対するほとんどの共有は、関連する共有オブジェクトで保持されます。これは、他のプラットフォームのアクセス制御リスト (ACL) と似た機能です。
共有のタイプ
Salesforce には、次のタイプの共有があります。
- 共有管理
- 共有管理では、レコードの所有者、ロール階層、および共有ルールに基づいて Lightning プラットフォームによって付与される共有アクセス権を使用します。
- レコードの所有者
- 各レコードは、ユーザまたは場合によっては、カスタムオブジェクト、ケース、およびリードのキューが所有します。レコードの所有者にはフルアクセスが自動的に付与され、レコードを参照、編集、移行、共有、および削除できます。
- ロール階層
- ロール階層により、その階層内の別のユーザよりも上位のユーザが、下位ユーザの所有レコードまたは下位ユーザに共有されているレコードに対して、同じレベルのアクセス権を持つことができます。そのため、ロール階層内のレコード所有者より上位のユーザにも、そのレコードに対するフルアクセスが暗黙的に付与されます。ロール階層は共有するレコードと共に維持されません。代わりに、ロール階層アクセス権が実行時に取得されます。詳細は、Salesforce オンラインヘルプの「階層を使用したアクセス権の制御」を参照してください。
- 共有ルール
-
共有ルールは、システム管理者が、特定のユーザグループが所有するレコードへのアクセス権を特定のグループまたはロール内のユーザに自動的に付与する場合に使用します。共有ルールは、AppExchange からインストールしたアプリケーションのパッケージに追加したり、共有ロジックをサポートする目的で使用したりすることはできません。
共有ルールは、レコード所有者または他の条件に基づいて作成できます。条件に基づく共有ルールの作成に Apex は使用できません。また、Apex を使用して条件に基づく共有をテストできません。
Force.com による共有管理で追加された暗黙的な共有はすべて、Salesforce ユーザインターフェース、SOAP API、または Apex を使用して直接変更することはできません。
- ユーザによる共有管理 (共有の直接設定)
- ユーザによる共有管理により、レコードの所有者や、レコードに対するフルアクセスを持つユーザは、ユーザまたはユーザグループとレコードを共有できます。一般にこの処理は、エンドユーザが単一レコードに対して実行します。レコードの所有者とロール階層内でその所有者の上位にあるユーザにのみ、レコードに対するフルアクセスが付与されます。他のユーザにフルアクセスを付与することはできません。特定のオブジェクトに対するオブジェクトレベルの「すべて変更」権限を持つユーザは、レコードを手動で共有することもできます。レコードの所有者が変更された場合や、共有で付与されたアクセス権でオブジェクトの組織の共有デフォルトアクセスレベルを超える追加アクセス権が許可されない場合に、ユーザによる共有管理が削除されます。
- Apex による共有管理
- 開発者は、Apex による共有管理を使用すると、アプリケーションの特定の共有要件を Apex または SOAP API によるプログラムでサポートできるようになります。この種類の共有は、共有管理に類似しています。「すべてのデータの編集」権限を持つユーザのみが、レコードへの Apex による共有管理を追加または変更できます。Apex による共有管理は、レコードの所有者を変更しても維持されます。
共有の理由項目
Salesforce ユーザインターフェースでカスタムオブジェクトの [理由] 項目は、レコードで使用される共有の種類を指定します。この項目は、Apex または API では rowCause となります。
次の各リスト項目は、レコードに使用される共有の種類です。表は、[理由] 項目値と関連する rowCause 値を示します。
- 共有管理
[理由] 項目値 rowCause 値 (Apex または API で使用) 取引先の共有 ImplicitChild 関連するレコードの所有者または共有 ImplicitParent 所有者 Owner 商談チーム Team 共有ルール Rule テリトリー割り当てルール TerritoryRule - ユーザによる共有管理
[理由] 項目値 rowCause 値 (Apex または API で使用) 共有の直接設定 Manual テリトリー直接設定 TerritoryManual - Apex による共有管理
[理由] 項目値 rowCause 値 (Apex または API で使用) 開発者が定義 開発者が定義
Apex による共有管理で表示されている理由は開発者が定義します。
アクセスレベル
レコードへのユーザのアクセス権を決定する場合、最も権限の高いアクセスレベルを使用します。ほとんどの共有オブジェクトは、次のアクセスレベルをサポートしています。
| アクセスレベル | API 名 | 説明 |
|---|---|---|
| 非公開 | None | レコードの所有者とロール階層内でその所有者の上位にあるユーザのみがレコードを参照または編集できます。このアクセスレベルは AccountShare オブジェクトにのみ適用されます。 |
| 参照のみ | Read | 指定されたユーザまたはグループがレコードの参照のみを実行できます。 |
| 参照・更新 | Edit | 指定されたユーザまたはグループがレコードを参照および編集できます。 |
| フルアクセス | All | 指定されたユーザまたはグループがレコードを参照、編集、移行、共有、削除できます。 |
共有に関する考慮事項
- Apex トリガとユーザレコードの共有
- 次の方法で開始されたトリガがレコードの所有者を変更する場合は、実行ユーザに新しい所有者のユーザレコードへの参照アクセス権が必要です。
- API
- 標準ユーザインターフェース
- Visualforce 標準コントローラ
- with sharing キーワードで定義されたクラス
- with sharing キーワードで定義されていないクラスを介して開始されたトリガは、システムモードで実行されます。この場合、トリガは実行ユーザに特定のアクセス権を要求しません。