Apex - Sécurité

La sécurité Apex fait référence au processus d'application des paramètres de sécurité et d'application des règles de partage lors de l'exécution du code. Les classes Apex ont des paramètres de sécurité qui peuvent être contrôlés via deux mots-clés.

Règles de sécurité et de partage des données

Apex s'exécute généralement dans un contexte système, c'est-à-dire avec les autorisations de l'utilisateur actuel. La sécurité au niveau du champ et les règles de partage ne sont pas prises en compte lors de l'exécution du code. Seul le code de bloc anonyme s'exécute avec l'autorisation de l'utilisateur qui exécute le code.

Notre code Apex ne doit pas exposer les données sensibles à l'utilisateur qui sont masquées via les paramètres de sécurité et de partage. Par conséquent, la sécurité Apex et l'application de la règle de partage sont les plus importantes.

Avec mot-clé de partage

Si vous utilisez ce mot-clé, le code Apex appliquera les paramètres de partage de l'utilisateur actuel au code Apex. Cela n'applique pas l'autorisation de profil, uniquement les paramètres de partage de niveau de données.

Prenons un exemple dans lequel, notre utilisateur a accès à 5 enregistrements, mais le nombre total d'enregistrements est de 10. Ainsi, lorsque la classe Apex sera déclarée avec le mot-clé "Avec partage", elle ne retournera que 5 enregistrements sur lesquels l'utilisateur a accès à.

Example

Tout d'abord, assurez-vous que vous avez créé au moins 10 enregistrements dans l'objet Client avec «Nom» de 5 enregistrements en tant que «Client ABC» et au repos 5 enregistrements en tant que «Client XYZ». Ensuite, créez une règle de partage qui partagera le «client ABC» avec tous les utilisateurs. Nous devons également nous assurer que nous avons défini l'OWD de l'objet Client comme Privé.

Collez le code ci-dessous dans le bloc Anonyme dans la Developer Console.

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

Sans partage de mot-clé

Comme son nom l'indique, la classe déclarée avec ce mot-clé s'exécute en mode système, c'est-à-dire que quel que soit l'accès de l'utilisateur à l'enregistrement, la requête récupère tous les enregistrements.

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

Définition de la sécurité pour la classe Apex

Vous pouvez activer ou désactiver une classe Apex pour un profil particulier. Les étapes pour la même chose sont données ci-dessous. Vous pouvez déterminer quel profil doit avoir accès à quelle classe.

Définition de la sécurité des classes Apex à partir de la page de la liste des classes

Step 1 - Dans Configuration, cliquez sur Développer → Classes Apex.

Step 2- Cliquez sur le nom de la classe que vous souhaitez restreindre. Nous avons cliqué sur CustomerOperationClass.

Step 3 - Cliquez sur Sécurité.

Step 4 - Sélectionnez les profils que vous souhaitez activer dans la liste Profils disponibles et cliquez sur Ajouter, ou sélectionnez les profils que vous souhaitez désactiver dans la liste Profils activés et cliquez sur Supprimer.

Step 5 - Cliquez sur Enregistrer.

Définition de la sécurité Apex à partir d'un jeu d'autorisations

Step 1 - Dans Configuration, cliquez sur Gérer les utilisateurs → Ensembles d'autorisations.

Step 2 - Sélectionnez un jeu d'autorisations.

Step 3 - Cliquez sur Apex Class Access.

Step 4 - Cliquez sur Modifier.

Step 5 - Sélectionnez les classes Apex que vous souhaitez activer dans la liste Classes Apex disponibles et cliquez sur Ajouter, ou sélectionnez les classes Apex que vous souhaitez désactiver dans la liste Classes Apex activées et cliquez sur Supprimer.

Step 6 - Cliquez sur le bouton Enregistrer.