Apex での項目レベルセキュリティの適用 (パイロット)

Apex に項目レベルでデータを保護するセキュリティ機能が新規追加されました。この機能には、Security および SObjectAccessDecision クラスを使用してアクセスします。Apex で現在のユーザの read、create、または update 操作のコンテキストでセキュアに処理を行うには、stripInaccessible メソッドを使用します。現在のユーザの項目レベルセキュリティに基づいて、このメソッドを使用してクエリ結果からユーザがアクセスできない項目を除外できます。また、このメソッドを使用して、DML 操作の前にアクセスできない項目を sObject から削除して例外を回避し、信頼されないソースから非逐次化された sObject を適切な状態にすることもできます。

対象: この変更は、Enterprise Edition、Performance Edition、Unlimited Edition、および Developer Edition の Lightning Experience および Salesforce Classic に適用されます。

メモ

メモ

このパイロット機能は、パイロットプログラムとして自動的に Sandbox 組織、開発者組織、スクラッチ組織で使用できます。この機能は変更される可能性があり、パイロット期間中は本番組織で使用できません。パイロットプログラムは変更される可能性があり、参加は保証されません。この機能は、Salesforce がドキュメント、プレスリリース、または公式声明で正式リリースを発表しない限り、正式リリースされません。特定期間内の正式リリースあるいはリリースの有無は保証できません。正式リリースされた製品および機能に基づいてのみ購入をご決定ください。この機能に関するフィードバックや提案は、IdeaExchange の「Security.stripInaccessible」グループに投稿してください。

方法: stripInaccesible メソッドは、ソースレコードに現在のユーザの項目レベルセキュリティチェックに失敗した項目がないか確認し、sObject のリストを返すために作成します。返されるリストは、現在のユーザがアクセスできない項目が除外されている以外は、ソースレコードと同じです。

ユーザに Opportunity オブジェクトの Probability 項目を作成する権限がない場合、この例ではレコードを作成する前に Probability 項目を削除します。DML 操作は例外を発生させずに完了します。
List<Opportunity> opportunities = new List<Opportunity>{
    new Opportunity(Name='Opportunity1'),
    new Opportunity(Name='Opportunity2', Probability=95)
};

// Strip fields that are not creatable
SObjectAccessDecision decision = Security.stripInaccessible(
    AccessType.CREATABLE,
    opportunities);

// Print stripped records
for (SObject strippedOpportunity : decision.getRecords()) {
    System.debug(strippedOpportunity);
}

// print modified indexes
System.debug(decision.getModifiedIndexes());

// Print removed fields
System.debug(decision.getRemovedFields());

//System.debug Output
// DEBUG|Opportunity:{Name=Opportunity1}
// DEBUG|Opportunity:{Name=Opportunity2}
// DEBUG|{1}
// DEBUG|{Opportunity={Probability}}