見出し画像

【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ブロック内は指定したユーザーで操作したことになる。ここでオブジェクト操作を実行する

}

終わり

以上、権限エラーの回避方法でした!
これで複雑な権限設定でもエラーなくテストできます!

参考サイト

この記事が参加している募集