เอเพ็กซ์ - ความปลอดภัย

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 - คลิกปุ่มบันทึก