เอเพ็กซ์ - ความปลอดภัย
Apex security หมายถึงกระบวนการใช้การตั้งค่าความปลอดภัยและบังคับใช้กฎการแชร์ในการรันโค้ด คลาส Apex มีการตั้งค่าความปลอดภัยที่สามารถควบคุมได้ผ่านสองคำหลัก
กฎการรักษาความปลอดภัยและการแบ่งปันข้อมูล
โดยทั่วไปเอเพ็กซ์จะทำงานในบริบทของระบบนั่นคือสิทธิ์ของผู้ใช้ปัจจุบัน ความปลอดภัยระดับฟิลด์และกฎการแบ่งปันจะไม่ถูกนำมาพิจารณาในระหว่างการเรียกใช้โค้ด เฉพาะรหัสบล็อกที่ไม่ระบุชื่อเท่านั้นที่ดำเนินการโดยได้รับอนุญาตจากผู้ใช้ที่เรียกใช้รหัส
รหัส Apex ของเราไม่ควรเปิดเผยข้อมูลที่ละเอียดอ่อนแก่ผู้ใช้ซึ่งถูกซ่อนไว้ผ่านการตั้งค่าความปลอดภัยและการแบ่งปัน ดังนั้นความปลอดภัยของเอเพ็กซ์และการบังคับใช้กฎการแบ่งปันจึงมีความสำคัญที่สุด
ด้วยการแบ่งปันคำหลัก
หากคุณใช้คีย์เวิร์ดนี้โค้ดเอเพ็กซ์จะบังคับใช้การตั้งค่าการแชร์ของผู้ใช้ปัจจุบันกับโค้ดเอเพ็กซ์ สิ่งนี้ไม่ได้บังคับใช้สิทธิ์โปรไฟล์ แต่เป็นการตั้งค่าการแชร์ระดับข้อมูลเท่านั้น
ให้เราพิจารณาตัวอย่างในกรณีนี้ผู้ใช้ของเราสามารถเข้าถึงระเบียนได้ 5 รายการ แต่จำนวนระเบียนทั้งหมดคือ 10 ดังนั้นเมื่อคลาส Apex จะถูกประกาศด้วยคำหลัก "With Sharing" จะส่งกลับเพียง 5 ระเบียนที่ผู้ใช้ มีสิทธิ์เข้าถึง
Example
ขั้นแรกตรวจสอบให้แน่ใจว่าคุณได้สร้างระเบียนอย่างน้อย 10 รายการในออบเจ็กต์ของลูกค้าโดยมี "ชื่อ" จาก 5 ระเบียนเป็น "ลูกค้า ABC" และเหลือ 5 ระเบียนเป็น "ลูกค้า XYZ" จากนั้นสร้างกฎการแบ่งปันซึ่งจะแชร์ 'ลูกค้า ABC' กับผู้ใช้ทั้งหมด นอกจากนี้เรายังต้องตรวจสอบให้แน่ใจว่าเราได้ตั้งค่าวัตถุ OWD ของลูกค้าเป็นส่วนตัว
วางโค้ดที่ระบุด้านล่างลงในบล็อก Anonymous ใน Developer Console
// 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();
โดยไม่ต้องแชร์คำหลัก
ตามชื่อที่แนะนำคลาสที่ประกาศด้วยคีย์เวิร์ดนี้จะดำเนินการในโหมดระบบกล่าวคือโดยไม่คำนึงถึงการเข้าถึงเรกคอร์ดของผู้ใช้แบบสอบถามจะดึงข้อมูลทั้งหมด
// 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 Class
คุณสามารถเปิดหรือปิดคลาส Apex สำหรับโปรไฟล์เฉพาะได้ ขั้นตอนเดียวกันจะได้รับด้านล่าง คุณสามารถกำหนดได้ว่าโปรไฟล์ใดควรเข้าถึงคลาสใด
การตั้งค่าความปลอดภัยคลาส Apex จากหน้ารายการคลาส
Step 1 - จากการตั้งค่าคลิกพัฒนา→ Apex Classes
Step 2- คลิกชื่อคลาสที่คุณต้องการ จำกัด เราได้คลิกที่ CustomerOperationClass
Step 3 - คลิกที่ความปลอดภัย
Step 4 - เลือกโปรไฟล์ที่คุณต้องการเปิดใช้งานจากรายการโปรไฟล์ที่มีและคลิกเพิ่มหรือเลือกโปรไฟล์ที่คุณต้องการปิดใช้งานจากรายการโปรไฟล์ที่เปิดใช้งานและคลิกที่ลบ
Step 5 - คลิกที่บันทึก
การตั้งค่า Apex Security จาก Permission Set
Step 1 - จากการตั้งค่าคลิกจัดการผู้ใช้→ชุดสิทธิ์
Step 2 - เลือกชุดสิทธิ์
Step 3 - คลิกที่ Apex Class Access
Step 4 - คลิกที่แก้ไข
Step 5 - เลือกคลาส Apex ที่คุณต้องการเปิดใช้งานจากรายการ Available Apex Classes แล้วคลิกเพิ่มหรือเลือกคลาส Apex ที่คุณต้องการปิดใช้งานจากรายการ Enabled Apex Classes แล้วคลิกลบ
Step 6 - คลิกปุ่มบันทึก