Apex - Seguridad

La seguridad de Apex se refiere al proceso de aplicar la configuración de seguridad y hacer cumplir las reglas de uso compartido en el código en ejecución. Las clases de Apex tienen una configuración de seguridad que se puede controlar mediante dos palabras clave.

Reglas de seguridad y uso compartido de datos

Apex generalmente se ejecuta en el contexto del sistema, es decir, los permisos del usuario actual. La seguridad a nivel de campo y las reglas de uso compartido no se tienen en cuenta durante la ejecución del código. Solo el código de bloque anónimo se ejecuta con el permiso del usuario que está ejecutando el código.

Nuestro código Apex no debe exponer los datos confidenciales al usuario que están ocultos a través de la configuración de seguridad y uso compartido. Por lo tanto, la seguridad de Apex y el cumplimiento de la regla de uso compartido es lo más importante.

Con compartir palabra clave

Si usa esta palabra clave, el código Apex aplicará la configuración de uso compartido del usuario actual al código Apex. Esto no aplica el permiso del perfil, solo la configuración de uso compartido del nivel de datos.

Consideremos un ejemplo en el que nuestro usuario tiene acceso a 5 registros, pero el número total de registros es 10. Por lo tanto, cuando la clase Apex se declare con la palabra clave "With Sharing", devolverá solo 5 registros en los que el usuario tiene acceso a.

Example

Primero, asegúrese de haber creado al menos 10 registros en el objeto Cliente con 'Nombre' de 5 registros como 'Cliente ABC' y el resto de 5 registros como 'Cliente XYZ'. Luego, cree una regla para compartir que compartirá el 'Cliente ABC' con todos los usuarios. También debemos asegurarnos de haber establecido el objeto OWD del cliente como Privado.

Pegue el código que se proporciona a continuación en el bloque Anónimo en la Consola para desarrolladores.

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

Sin compartir palabra clave

Como sugiere el nombre, la clase declarada con esta palabra clave se ejecuta en modo Sistema, es decir, independientemente del acceso del usuario al registro, la consulta buscará todos los registros.

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

Configuración de seguridad para la clase Apex

Puede habilitar o deshabilitar una clase de Apex para un perfil en particular. Los pasos para el mismo se dan a continuación. Puede determinar qué perfil debe tener acceso a qué clase.

Configuración de la seguridad de la clase Apex desde la página de lista de clases

Step 1 - Desde Configuración, haga clic en Desarrollar → Clases de Apex.

Step 2- Haga clic en el nombre de la clase que desea restringir. Hemos hecho clic en CustomerOperationClass.

Step 3 - Haga clic en Seguridad.

Step 4 - Seleccione los perfiles que desea habilitar de la lista Perfiles disponibles y haga clic en Agregar, o seleccione los perfiles que desea deshabilitar de la lista Perfiles habilitados y haga clic en Eliminar.

Step 5 - Haga clic en Guardar.

Configuración de la seguridad de Apex desde el conjunto de permisos

Step 1 - Desde Configuración, haga clic en Administrar usuarios → Conjuntos de permisos.

Step 2 - Seleccione un conjunto de permisos.

Step 3 - Haga clic en Apex Class Access.

Step 4 - Haga clic en Editar.

Step 5 - Seleccione las clases de Apex que desea habilitar de la lista de Clases de Apex disponibles y haga clic en Agregar, o seleccione las clases de Apex que desea deshabilitar de la lista de Clases de Apex habilitadas y haga clic en eliminar.

Step 6 - Haga clic en el botón Guardar.