共有ルールの適用
Apex は一般に、システムコンテキストで実行されます。つまり、コード実行時に、現在のユーザの権限、項目レベルセキュリティ、および共有ルールは考慮されません。
これらのルールは強制されないため、Apex を使用する開発者は、ユーザ権限、項目レベルのセキュリティ、または組織のデフォルト設定によって通常は非表示となる機密データが不注意で公開されないようにする必要があります。Web サービスについては特に注意が必要です。Web サービスは権限によって制限できますが、初期化された後はシステムコンテキストで実行されます。
多くの場合、システムコンテキストは、組織内のすべてのデータへのアクセスが必要なトリガや Web サービスなど、システムレベルの操作に対して、正しい動作を設定します。ただし、特定の Apex クラスが現在のユーザに適用されている共有ルールを強制実行するように指定することもできます(共有ルールの詳細は、Salesforce オンラインヘルプを参照してください)。
次の例には 2 つのクラスがあり、1 番目のクラス (CWith) では、共有ルールが適用されますが、2 番目のクラス (CWithout) では適用されません。CWithout クラスでは、メソッドが 1 番目のクラスからコールされ、適用された共有ルールで実行されます。CWithout クラスには内部クラスが含まれます。このクラスでは、コール側と同じ共有コンテキストでコードが実行されます。また、クラスを拡張するクラスが含まれています。これにより、共有設定なしでクラスが継承されます。
現在のユーザの共有ルールを強制実行すると次のような影響があります。
- SOQL および SOSL クエリ。クエリがシステムコンテキストで動作する場合より少ない行を返す場合があります。
- DML 操作。現在のユーザに正しい権限が付与されていない場合、操作が失敗する場合があります。たとえば、ユーザが組織内に存在する外部キー値を指定したものの、現在のユーザにはそのキー値へのアクセス権が付与されていない場合などです。