Apex - Güvenlik
Apex güvenliği, güvenlik ayarlarını uygulama ve kod çalıştırma üzerinde paylaşım kurallarını uygulama sürecini ifade eder. Apex sınıfları, iki anahtar kelime ile kontrol edilebilen güvenlik ayarlarına sahiptir.
Veri Güvenliği ve Paylaşım Kuralları
Apex genellikle sistem bağlamında, yani mevcut kullanıcının izinlerinde çalışır. Alan düzeyinde güvenlik ve paylaşım kuralları, kod yürütme sırasında dikkate alınmaz. Yalnızca anonim blok kodu, kodu yürüten kullanıcının izniyle yürütülür.
Apex kodumuz, güvenlik ve paylaşım ayarları yoluyla gizlenen hassas verileri Kullanıcıya ifşa etmemelidir. Bu nedenle, Apex güvenliği ve paylaşım kuralını uygulamak çok önemlidir.
Anahtar Kelime Paylaşımı ile
Bu anahtar kelimeyi kullanırsanız, Apex kodu mevcut kullanıcının Paylaşım ayarlarını Apex koduna zorlayacaktır. Bu, Profil iznini zorunlu kılmaz, yalnızca veri düzeyi paylaşım ayarlarını uygular.
Kullanıcımızın 5 kayda erişimi olduğu, ancak toplam kayıt sayısının 10 olduğu bir örneği ele alalım. Yani Apex sınıfı, "Paylaşımla" Anahtar Kelimesi ile ilan edildiğinde, sadece kullanıcının bulunduğu 5 kaydı döndürecektir. erişimi var.
Example
Öncelikle, Müşteri nesnesinde 5 kayıtlık 'Ad' ile 'ABC Müşterisi' olarak en az 10 kayıt oluşturduğunuzdan ve geri kalan 5 kaydı 'XYZ Müşterisi' olarak oluşturduğunuzdan emin olun. Ardından, 'ABC Müşterisini' tüm Kullanıcılarla paylaşacak bir paylaşım kuralı oluşturun. Ayrıca, OWD of Customer nesnesini Özel olarak ayarladığımızdan da emin olmamız gerekir.
Aşağıda verilen kodu Developer Console'daki Anonim bloğa yapıştırın.
// 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();
Anahtar Kelime Paylaşmadan
Adından da anlaşılacağı gibi, bu anahtar sözcükle bildirilen sınıf Sistem modunda yürütülür, yani Kullanıcının kayda erişiminden bağımsız olarak, sorgu tüm kayıtları alır.
// 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.
Apex Sınıfı için Güvenliği Ayarlama
Belirli bir profil için bir Apex sınıfını etkinleştirebilir veya devre dışı bırakabilirsiniz. Aynısı için adımlar aşağıda verilmiştir. Hangi profilin hangi sınıfa erişimi olması gerektiğini belirleyebilirsiniz.
Sınıf listesi sayfasından Apex sınıfı güvenliğini ayarlama
Step 1 - Kurulum'dan, Geliştir → Apex Sınıfları'nı tıklayın.
Step 2- Kısıtlamak istediğiniz sınıfın adını tıklayın. CustomerOperationClass'a tıkladık.
Step 3 - Güvenlik'e tıklayın.
Step 4 - Kullanılabilir Profiller listesinden etkinleştirmek istediğiniz profilleri seçin ve Ekle'ye tıklayın veya Etkin Profiller listesinden devre dışı bırakmak istediğiniz profilleri seçin ve Kaldır'a tıklayın.
Step 5 - Kaydet'e tıklayın.
Apex Güvenliğini İzin Setinden Ayarlama
Step 1 - Kurulum'dan Kullanıcıları Yönet → İzin Kümeleri'ni tıklayın.
Step 2 - Bir izin seti seçin.
Step 3 - Apex Class Access'e tıklayın.
Step 4 - Düzenle'ye tıklayın.
Step 5 - Available Apex Classes listesinden etkinleştirmek istediğiniz Apex sınıflarını seçin ve Add'e tıklayın veya Enabled Apex Classes listesinden devre dışı bırakmak istediğiniz Apex sınıflarını seçin ve kaldır'a tıklayın.
Step 6 - Kaydet düğmesini tıklayın.