Apex-security
Apex-セキュリティ
Apexセキュリティとは、セキュリティ設定を適用し、コードの実行時に共有ルールを適用するプロセスを指します。 Apexクラスには、2つのキーワードで制御できるセキュリティ設定があります。
データセキュリティと共有ルール
Apexは通常、システムコンテキスト、つまり現在のユーザーの権限で実行されます。 フィールドレベルのセキュリティ、および共有ルールは、コード実行中に考慮されません。 コードを実行しているユーザーの許可を得て、匿名ブロックコードのみが実行されます。
Apexコードは、セキュリティおよび共有設定によって隠されている機密データをユーザーに公開しないでください。 したがって、Apexセキュリティと共有ルールの適用が最も重要です。
共有キーワードあり
このキーワードを使用すると、Apexコードは現在のユーザーの共有設定をApexコードに適用します。 これは、プロファイル権限を強制するのではなく、データレベルの共有設定のみを強制します。
ユーザーが5つのレコードにアクセスできるが、レコードの総数は10である例を考えてみましょう。 そのため、Apexクラスが「With Sharing」キーワードで宣言されると、ユーザーがアクセスできる5つのレコードのみが返されます。
例
まず、Customerオブジェクトに少なくとも5つのレコードの「Name」を「ABC Customer」として、残りの5つのレコードを「XYZ Customer」として少なくとも10個のレコードを作成したことを確認します。 次に、「ABCカスタマー」をすべてのユーザーと共有する共有ルールを作成します。 また、CustomerオブジェクトのOWDをプライベートとして設定したことを確認する必要があります。
下記のコードを開発者コンソールの匿名ブロックに貼り付けます。
//Class With Sharing
public with sharing class MyClassWithSharing {
//Query To fetch 10 records
List<apex_customer__c> CustomerList = [SELECT id, Name FROM APEX_Customer__c LIMIT 10];
public Integer executeQuery () {
System.debug('List will have only 5 records and the actual records are'
+ CustomerList.size()+' as user has access to'+CustomerList);
Integer ListSize = CustomerList.size();
return ListSize;
}
}
//Save the above class and then execute as below
//Execute class using the object of class
MyClassWithSharing obj = new MyClassWithSharing();
Integer ListSize = obj.executeQuery();
キーワードを共有しない
名前が示すように、このキーワードで宣言されたクラスはシステムモードで実行されます。つまり、ユーザーのレコードへのアクセスに関係なく、クエリはすべてのレコードをフェッチします。
//Class Without Sharing
public without sharing class MyClassWithoutSharing {
List<apex_customer__c> CustomerList = [SELECT id, Name FROM APEX_Customer__c LIMIT 10];
//Query To fetch 10 records, this will return all the records
public Integer executeQuery () {
System.debug('List will have only 5 records and the actula records are'
+ CustomerList.size()+' as user has access to'+CustomerList);
Integer ListSize = CustomerList.size();
return ListSize;
}
}
//Output will be 10 records.
Apexクラスのセキュリティの設定
特定のプロファイルのApexクラスを有効または無効にすることができます。 同じ手順を以下に示します。 どのプロファイルがどのクラスにアクセスする必要があるかを決定できます。
クラスリストページからApexクラスセキュリティを設定する
- ステップ1 *-[設定]から、[開発]→[Apexクラス]をクリックします。
- ステップ2 *-制限するクラスの名前をクリックします。 CustomerOperationClassをクリックしました。
- ステップ3 *-[セキュリティ]をクリックします。
- ステップ4 *-有効にするプロファイルを[利用可能なプロファイル]リストから選択して[追加]をクリックするか、無効にするプロファイルを[有効なプロファイル]リストから選択して[削除]をクリックします。
- ステップ5 *-[保存]をクリックします。
権限セットからApexセキュリティを設定する
- ステップ1 *-[設定]から、[ユーザーの管理]→[権限セット]をクリックします。
PermissionsetセットからのApexクラスセキュリティの設定Step1
- ステップ2 *-権限セットを選択します。
PermissionsetからApexクラスのセキュリティを設定ステップ2
- ステップ3 *-[Apexクラスアクセス]をクリックします。
PermissionsetからApexクラスのセキュリティを設定ステップ3
- ステップ4 *-[編集]をクリックします。
権限セットのステップ4からApexクラスのセキュリティを設定
- ステップ5 *-有効にするApexクラスを[利用可能なApexクラス]リストから選択して[追加]をクリックするか、無効にするApexクラスを[有効なApexクラス]リストから選択して[削除]をクリックします。
PermissionsetからApexクラスのセキュリティを設定ステップ5
- ステップ6 *-[保存]ボタンをクリックします。