Apex - Segurança

A segurança do Apex se refere ao processo de aplicação de configurações de segurança e reforço das regras de compartilhamento no código em execução. As classes Apex têm configurações de segurança que podem ser controladas por meio de duas palavras-chave.

Regras de segurança e compartilhamento de dados

O Apex geralmente é executado no contexto do sistema, ou seja, nas permissões do usuário atual. A segurança em nível de campo e as regras de compartilhamento não são levadas em consideração durante a execução do código. Apenas o código de bloco anônimo é executado com a permissão do usuário que está executando o código.

Nosso código Apex não deve expor os dados confidenciais ao usuário que estão ocultos por meio de configurações de segurança e compartilhamento. Portanto, a segurança do Apex e o cumprimento da regra de compartilhamento são muito importantes.

Com palavras-chave de compartilhamento

Se você usar esta palavra-chave, o código do Apex irá forçar as configurações de compartilhamento do usuário atual para o código do Apex. Isso não impõe a permissão de Perfil, apenas as configurações de compartilhamento de nível de dados.

Vamos considerar um exemplo em que, nosso usuário tem acesso a 5 registros, mas o número total de registros é 10. Portanto, quando a classe Apex for declarada com a palavra-chave "Com compartilhamento", ela retornará apenas 5 registros nos quais o usuário tem acesso a.

Example

Primeiro, certifique-se de ter criado pelo menos 10 registros no objeto Cliente com 'Nome' de 5 registros como 'Cliente ABC' e 5 registros restantes como 'Cliente XYZ'. Em seguida, crie uma regra de compartilhamento que compartilhará o 'Cliente ABC' com todos os usuários. Também precisamos ter certeza de que definimos o OWD do objeto Cliente como Privado.

Cole o código fornecido abaixo no bloco Anônimo no console do desenvolvedor.

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

Sem compartilhar palavras-chave

Como o nome sugere, a classe declarada com esta palavra-chave é executada no modo Sistema, ou seja, independente do acesso do usuário ao registro, a consulta irá buscar todos os 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.

Configurando Segurança para Apex Class

Você pode ativar ou desativar uma classe Apex para um perfil específico. As etapas para o mesmo são fornecidas abaixo. Você pode determinar qual perfil deve ter acesso a qual classe.

Configurando a segurança da classe Apex na página de lista de classes

Step 1 - Em Configuração, clique em Desenvolver → Classes Apex.

Step 2- Clique no nome da turma que você deseja restringir. Clicamos em CustomerOperationClass.

Step 3 - Clique em Segurança.

Step 4 - Selecione os perfis que deseja ativar na lista Perfis disponíveis e clique em Adicionar, ou selecione os perfis que deseja desativar na lista Perfis ativados e clique em Remover.

Step 5 - Clique em Salvar.

Configurando Segurança Apex a partir de Conjunto de Permissão

Step 1 - Em Configuração, clique em Gerenciar usuários → Conjuntos de permissões.

Step 2 - Selecione um conjunto de permissões.

Step 3 - Clique em Acesso à classe Apex.

Step 4 - Clique em Editar.

Step 5 - Selecione as classes Apex que deseja habilitar na lista Classes Apex Disponíveis e clique em Adicionar ou selecione as classes Apex que deseja desabilitar na lista Classes Apex Habilitadas e clique em remover.

Step 6 - Clique no botão Salvar.