Apex - Sicherheit

Apex-Sicherheit bezieht sich auf das Anwenden von Sicherheitseinstellungen und das Durchsetzen der Freigaberegeln für die Ausführung von Code. Apex-Klassen verfügen über Sicherheitseinstellungen, die über zwei Schlüsselwörter gesteuert werden können.

Datensicherheits- und Freigaberegeln

Apex wird im Allgemeinen im Systemkontext ausgeführt, dh mit den Berechtigungen des aktuellen Benutzers. Sicherheits- und Freigaberegeln auf Feldebene werden bei der Codeausführung nicht berücksichtigt. Nur der anonyme Blockcode wird mit der Erlaubnis des Benutzers ausgeführt, der den Code ausführt.

Unser Apex-Code sollte die vertraulichen Daten nicht dem Benutzer zugänglich machen, der über Sicherheits- und Freigabeeinstellungen verborgen ist. Daher ist die Apex-Sicherheit und die Durchsetzung der Freigaberegel am wichtigsten.

Mit Schlüsselwort teilen

Wenn Sie dieses Schlüsselwort verwenden, erzwingt der Apex-Code die Freigabeeinstellungen des aktuellen Benutzers für Apex-Code. Dadurch wird die Profilberechtigung nicht erzwungen, sondern nur die Einstellungen für die Freigabe auf Datenebene.

Betrachten wir ein Beispiel, in dem unser Benutzer Zugriff auf 5 Datensätze hat, die Gesamtzahl der Datensätze jedoch 10 beträgt. Wenn die Apex-Klasse also mit dem Schlüsselwort "With Sharing" deklariert wird, werden nur 5 Datensätze zurückgegeben, für die der Benutzer hat Zugriff auf.

Example

Stellen Sie zunächst sicher, dass Sie mindestens 10 Datensätze im Kundenobjekt mit 'Name' von 5 Datensätzen als 'ABC-Kunde' und 5 Datensätzen als 'XYZ-Kunde' erstellt haben. Erstellen Sie dann eine Freigaberegel, die den 'ABC-Kunden' für alle Benutzer freigibt. Wir müssen auch sicherstellen, dass wir das OWD des Kundenobjekts als Privat festgelegt haben.

Fügen Sie den unten angegebenen Code in den Block "Anonym" in der Entwicklerkonsole ein.

// 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();

Ohne Schlüsselwort zu teilen

Wie der Name schon sagt, wird die mit diesem Schlüsselwort deklarierte Klasse im Systemmodus ausgeführt, dh unabhängig vom Zugriff des Benutzers auf den Datensatz ruft die Abfrage alle Datensätze ab.

// 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.

Festlegen der Sicherheit für die Apex-Klasse

Sie können eine Apex-Klasse für ein bestimmtes Profil aktivieren oder deaktivieren. Die Schritte dazu sind unten angegeben. Sie können festlegen, welches Profil Zugriff auf welche Klasse haben soll.

Festlegen der Apex-Klassensicherheit auf der Seite mit der Klassenliste

Step 1 - Klicken Sie im Setup auf Entwickeln → Apex-Klassen.

Step 2- Klicken Sie auf den Namen der Klasse, die Sie einschränken möchten. Wir haben auf CustomerOperationClass geklickt.

Step 3 - Klicken Sie auf Sicherheit.

Step 4 - Wählen Sie in der Liste Verfügbare Profile die Profile aus, die Sie aktivieren möchten, und klicken Sie auf Hinzufügen, oder wählen Sie in der Liste Aktivierte Profile die Profile aus, die Sie deaktivieren möchten, und klicken Sie auf Entfernen.

Step 5 - Klicken Sie auf Speichern.

Festlegen der Apex-Sicherheit über den Berechtigungssatz

Step 1 - Klicken Sie im Setup auf Benutzer verwalten → Berechtigungssätze.

Step 2 - Wählen Sie einen Berechtigungssatz.

Step 3 - Klicken Sie auf Apex Class Access.

Step 4 - Klicken Sie auf Bearbeiten.

Step 5 - Wählen Sie die Apex-Klassen, die Sie aktivieren möchten, aus der Liste Verfügbare Apex-Klassen aus und klicken Sie auf Hinzufügen, oder wählen Sie die Apex-Klassen, die Sie deaktivieren möchten, aus der Liste Aktivierte Apex-Klassen aus und klicken Sie auf Entfernen.

Step 6 - Klicken Sie auf die Schaltfläche Speichern.