WITH SECURITY_ENFORCED を使用した SOQL クエリの絞り込み (ベータ)
WITH SECURITY_ENFORCED 句を使用して、Apex コードの SOQL SELECT クエリ (サブクエリとクロスオブジェクトリレーションを含む) の項目およびオブジェクトレベルセキュリティ権限を確認できます。
Apex は一般に、システムコンテキストで実行されます。つまり、コード実行時に、現在のユーザの権限、項目レベルセキュリティ、および共有ルールは考慮されません。前のリリースでも項目レベルセキュリティとオブジェクトレベルセキュリティの確認の実行は可能でしたが、この句はクエリ操作の冗長性と技術的な複雑性を大幅に削減します。この機能は、セキュリティを含む開発経験が少ない Apex 開発者と、権限エラーのグレースフルデグラデーションが不要なアプリケーション向けです。
SOQL SELECT クエリで WITH SECURITY_ENFORCED を使用して参照されている項目またはオブジェクトへのアクセス権限がユーザにない場合、例外が発生し、データは返されません。
例
LastName または Description いずれかの項目アクセスが非表示の場合、次のクエリでは権限が不十分であることを示す例外が発生します。
1List<Account> act1 = [SELECT Id, (SELECT LastName FROM Contacts),
2 (SELECT Description FROM Opportunities)
3 FROM Account WITH SECURITY_ENFORCED]例
Website の項目アクセスが非表示の場合、次のクエリでは権限が不十分であることを示す例外が発生します。
1List<Account> act2 = [SELECT Id, parent.Name, parent.Website
2 FROM Account WITH SECURITY_ENFORCED]例
Type の項目アクセスが非表示の場合、次の集計関数クエリでは権限が不十分であることを示す例外が発生します。
1List<AggregateResult> agr1 = [SELECT GROUPING(Type)
2 FROM Opportunity WITH SECURITY_ENFORCED
3 GROUP BY Type]