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.