【Salesforce】Apexテストコードでのオブジェクト権限エラーの回避方法。指定したユーザーでオブジェクト操作」を実装する
こんにちは。エンジニアの藤野です。
今回はApexテストコードでオブジェクト権限エラーの回避方法をご紹介します。
Salesforceの権限設定はテストコードでも引き継がれるため、オブジェクト操作をしようとしたときに、権限エラーが発生します。
このエラーを回避するには、「権限にあうユーザーを準備して、準備したユーザーでオブジェクトを作成する」を実装する必要があります。
権限にあうユーザーを準備する
まずは権限セット、ロール、プロファイルをユーザーに設定して、ユーザーを準備します。
権限セット
権限セットを割り当てるには、PermissionSetAssignmentの作成が必要になります。PermissionSetAssignmentに権限セット(PermissionSet)とユーザーのIDを設定することで権限セットが割り当てられます。
// 権限セットを取得する
PermissionSet permissionSet = [SELECT Id FROM PermissionSet WHERE Name = :{取得したい権限セットのName}];
// ユーザーに権限セットを割り当てる
PermissionSetAssignment psa = new PermissionSetAssignment();
psa.PermissionSetId = permissionSet.Id;
psa.AssigneeId = user.Id;
insert psa;
参考サイト
ロール
ロールを割り当てるには、ユーザーオブジェクトのUserRoleIdにロールのIDを設定する必要があります。
// ロールを取得する
UserRole userRole = [SELECT Id FROM UserRole WHERE DeveloperName = :{取得したいロールのDeveloperName}];
// ユーザーに設定する
user.UserRoleId = role.Id;
参考サイト
プロファイル
プロファイルを割り当てるには、ユーザーオブジェクトのProfileIdに、プロファイルのIDを設定する必要があります。
// プロファイルを取得する
Profile profile = [SELECT Id,UserType FROM Profile WHERE Name = :{取得したいプロファイルのName}];
// ユーザーに設定する
user.ProfileId = profile.Id;
参考サイト
ユーザーを指定する
ここからは、指定したユーザーでオブジェクトを操作する方法についてです。
ユーザーを指定するにはrunAsメソッドを使います。
runAsメソッドのブロック内は、指定したユーザーとしてプログラムが実行されます。
// オブジェクト操作権限を持つユーザーを指定する
System.runAs(user) {
// ここに処理を書く
// runAsブロック内は指定したユーザーで操作したことになる。ここでオブジェクト操作を実行する
}
終わり
以上、権限エラーの回避方法でした!
これで複雑な権限設定でもエラーなくテストできます!