Apex - bezpieczeństwo
Bezpieczeństwo Apex odnosi się do procesu stosowania ustawień bezpieczeństwa i egzekwowania reguł udostępniania podczas uruchamiania kodu. Klasy Apex mają ustawienia zabezpieczeń, które można kontrolować za pomocą dwóch słów kluczowych.
Zasady bezpieczeństwa i udostępniania danych
Apex generalnie działa w kontekście systemowym, to znaczy z uprawnieniami bieżącego użytkownika. Bezpieczeństwo na poziomie pola i zasady udostępniania nie są brane pod uwagę podczas wykonywania kodu. Tylko anonimowy kod blokowy jest wykonywany za zgodą użytkownika wykonującego kod.
Nasz kod Apex nie powinien ujawniać użytkownikowi wrażliwych danych, które są ukryte za pomocą ustawień bezpieczeństwa i udostępniania. Dlatego najważniejsze jest bezpieczeństwo Apex i egzekwowanie reguły udostępniania.
Ze słowem kluczowym udostępniania
Jeśli użyjesz tego słowa kluczowego, kod Apex wymusi ustawienia udostępniania bieżącego użytkownika w kodzie Apex. Nie wymusza to uprawnień do profilu, tylko ustawienia udostępniania na poziomie danych.
Rozważmy przykład, w którym nasz użytkownik ma dostęp do 5 rekordów, ale łączna liczba rekordów wynosi 10. Więc kiedy klasa Apex zostanie zadeklarowana za pomocą słowa kluczowego „With Sharing”, zwróci tylko 5 rekordów, na których użytkownik ma dostęp do.
Example
Najpierw upewnij się, że utworzyłeś co najmniej 10 rekordów w obiekcie klienta z „Nazwą” 5 rekordów jako „Klient ABC”, a pozostałe 5 rekordów jako „Klient XYZ”. Następnie utwórz regułę udostępniania, która będzie udostępniać „Klienta ABC” wszystkim Użytkownikom. Musimy również upewnić się, że ustawiliśmy OWD obiektu Customer jako Private.
Wklej poniższy kod do bloku Anonymous w Konsoli programisty.
// 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();
Bez udostępniania słowa kluczowego
Jak sama nazwa wskazuje, klasa zadeklarowana tym słowem kluczowym jest wykonywana w trybie System, tzn. Niezależnie od dostępu użytkownika do rekordu, zapytanie pobierze wszystkie rekordy.
// 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.
Ustawianie bezpieczeństwa dla klasy Apex
Możesz włączyć lub wyłączyć klasę Apex dla określonego profilu. Kroki tego samego są podane poniżej. Możesz określić, który profil powinien mieć dostęp do której klasy.
Ustawianie zabezpieczeń klasy Apex na stronie z listą klas
Step 1 - W programie Setup kliknij opcję Develop → Apex Classes.
Step 2- Kliknij nazwę klasy, którą chcesz ograniczyć. Kliknęliśmy na CustomerOperationClass.
Step 3 - Kliknij Bezpieczeństwo.
Step 4 - Wybierz profile, które chcesz włączyć, z listy Dostępne profile i kliknij Dodaj lub wybierz profile, które chcesz wyłączyć z listy Włączone profile i kliknij Usuń.
Step 5 - Kliknij Zapisz.
Ustawianie zabezpieczeń Apex z zestawu uprawnień
Step 1 - W programie Setup kliknij opcję Zarządzaj użytkownikami → Zestawy uprawnień.
Step 2 - Wybierz polisę uprawnień.
Step 3 - Kliknij opcję Apex Class Access.
Step 4 - Kliknij Edytuj.
Step 5 - Wybierz klasy Apex, które chcesz włączyć z listy Dostępne klasy Apex i kliknij Dodaj lub wybierz klasy Apex, które chcesz wyłączyć z listy Włączone klasy Apex i kliknij usuń.
Step 6 - Kliknij przycisk Zapisz.