Apex-セキュリティ
Apexセキュリティとは、セキュリティ設定を適用し、実行中のコードに共有ルールを適用するプロセスを指します。Apexクラスには、2つのキーワードで制御できるセキュリティ設定があります。
データセキュリティと共有ルール
Apexは通常、システムコンテキスト、つまり現在のユーザーのアクセス許可で実行されます。コードの実行時には、フィールドレベルのセキュリティと共有ルールは考慮されません。匿名ブロックコードのみが、コードを実行しているユーザーの許可を得て実行されます。
私たちのApexコードは、セキュリティと共有設定によって隠されている機密データをユーザーに公開してはなりません。したがって、Apexのセキュリティと共有ルールの適用が最も重要です。
共有キーワード付き
このキーワードを使用すると、Apexコードは、現在のユーザーの共有設定をApexコードに強制します。これはプロファイル権限を強制せず、データレベル共有設定のみを強制します。
ユーザーが5つのレコードにアクセスできるが、レコードの総数が10である例を考えてみましょう。したがって、Apexクラスが「WithSharing」キーワードで宣言されると、ユーザーが返す5つのレコードのみが返されます。にアクセスできます。
Example
まず、Customerオブジェクトに少なくとも10レコードを作成し、5レコードの「Name」を「ABCCustomer」として作成し、残りの5レコードを「XYZCustomer」として作成したことを確認します。次に、「ABC顧客」をすべてのユーザーと共有する共有ルールを作成します。また、CustomerオブジェクトのOWDがPrivateとして設定されていることを確認する必要があります。
以下のコードを開発者コンソールの匿名ブロックに貼り付けます。
// 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クラスセキュリティの設定
Step 1 −「セットアップ」から、「開発」→「Apexクラス」をクリックします。
Step 2−制限するクラスの名前をクリックします。CustomerOperationClassをクリックしました。
Step 3 − [セキュリティ]をクリックします。
Step 4 − [使用可能なプロファイル]リストから有効にするプロファイルを選択して[追加]をクリックするか、[有効なプロファイル]リストから無効にするプロファイルを選択して[削除]をクリックします。
Step 5 − [保存]をクリックします。
権限セットからのApexセキュリティの設定
Step 1 − [設定]から、[ユーザーの管理]→[権限セット]をクリックします。
Step 2 −権限セットを選択します。
Step 3 − Apex ClassAccessをクリックします。
Step 4 − [編集]をクリックします。
Step 5 − [使用可能なApexクラス]リストから有効にするApexクラスを選択して[追加]をクリックするか、[有効なApexクラス]リストから無効にするApexクラスを選択して[削除]をクリックします。
Step 6 − [保存]ボタンをクリックします。