この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Apex での共有ルールのスキップ

Apex コードでは、プロファイルベースの権限、項目レベルのセキュリティ、共有ルール、組織全体のデフォルトを順守します。

Salesforce Platform は、データ共有ルールを広範囲に使用します。各オブジェクトは、どのユーザおよびプロファイルがそのオブジェクト種別のレコードを参照、作成、編集、削除できるかを示す、一意の権限を持つことができます。これらの制限は、コードで標準コントローラを使用しているときに適用されます。

ただし、カスタム Apex クラスまたは Visualforce ページは、組み込みプロファイル権限、項目レベルのセキュリティ制限、共有ルールをもともと順守しません。デフォルトでは、Apex クラスは組織内のすべてのデータを参照および更新できます。

Apex コードで非表示の機密データをユーザにさらさないでください。プロファイルベースの権限、項目レベルのセキュリティ、共有ルール、組織全体のデフォルトを順守します。

共有を正しく適用するには、次の一般的なルールに従います。
  • すべてのグローバルクラス、または @NamespaceAccessible メソッドを含むクラスで with sharing を宣言します。共有宣言を省略しないでください。また、ソリューションへのこれらの EntryPoint で without sharing を使用しないでください。
  • グローバルではないコントローラクラス、または @NamespaceAccessible とマークされていないコントローラクラスでは、クラスを with inherited sharing または with sharing として宣言します。共有宣言を省略しないでください。また、ソリューションへのこれらの EntryPoint で without sharing を使用しないでください。
  • データアクセス操作を直接実行するすべてのクラスを with sharing として宣言します。ソリューションのクラスが without sharing とマークされていない場合は、with inherited sharing を使用することもできます。
ただし、注意すべき例外がいくつかあります。次の場合は、一般的なルールに従わないでください。
  • サイトまたはコミュニティを作成しており、ゲストユーザによるデータへのアクセスを拒否したい。
  • 特注のセキュリティポリシーを使用して、名前空間に属しているカスタムオブジェクトにアクセスしている。この場合は、AppExchange セキュリティレビュー申請ドキュメントの一部として、ポリシーを文書化します。この例外は、標準オブジェクトには適用されません。組織のシステム管理者は、標準オブジェクトのセキュリティポリシーを単独で所有します。

Apex の例

次の Apex コードでは、クラスのヘッダーに with sharing キーワードが追加されていません。デフォルトでは、共有ルールは適用されません。
1public class maincontroller {
2   @AuraEnabled public static String saveJobApplication(String vacId, String userId) {
3      ...
4   }
5}

次の Apex コードでは、with sharing キーワードが使用されています。共有ルールが適用されます。

1public with sharing class maincontroller {
2   @AuraEnabled public static String saveJobApplication(String vacId, String userId) {
3       ...
4   }
5}

共有ルールの適用についての詳細は、Trailhead の「Secure Server-Side Development module (セキュアなサーバーサイド開発モジュール)」を確認してください。