データアクセス制御
Lightning Platform は、データ共有ルールを広範囲に使用します。各オブジェクトには権限があり、ユーザーが読み取り、作成、編集、削除できる共有設定がある場合があります。これらの設定は、すべての標準コントローラーを使用する場合に強制されます。
Apex クラスを使用する場合、組み込みユーザー権限、および項目レベルのセキュリティ制限は実行時に重視されません。デフォルトの動作では、Apex クラスがすべてのデータを読み込み、更新できます。これらのルールは強制されないため、Apex を使用する開発者は、ユーザー権限、項目レベルのセキュリティ、デフォルト設定などで通常は非表示となる機密データが不用意に公開されないようにする必要があります。たとえば、次の Apex 擬似コードについて考えます。
1public class customController {
2 public void read() {
3 Contact contact = [SELECT id FROM Contact WHERE Name = :value];
4 }
5}この場合、現在ログインしているユーザーにこれらのレコードを表示する権限がない場合でも、すべての取引先責任者レコードが検索されます。解決策として、クラスを宣言する場合、次のように修飾キーワードの with sharing を使用します。
1public with sharing class customController {
2 . . .
3}with sharing キーワードを使用すると、プラットフォームはすべてのレコードに完全アクセス権限を付与するのではなく、現在ログインしているユーザーのセキュリティ共有権限を使用します。