Apex - Bảo mật

Apex security đề cập đến quá trình áp dụng cài đặt bảo mật và thực thi các quy tắc chia sẻ về mã đang chạy. Các lớp Apex có cài đặt bảo mật có thể được kiểm soát thông qua hai từ khóa.

Quy tắc chia sẻ và bảo mật dữ liệu

Apex thường chạy trong ngữ cảnh hệ thống, tức là quyền của người dùng hiện tại. Bảo mật cấp trường và quy tắc chia sẻ không được tính đến trong quá trình thực thi mã. Chỉ mã khối ẩn danh thực thi với sự cho phép của người dùng đang thực thi mã.

Mã Apex của chúng tôi không được để lộ dữ liệu nhạy cảm cho Người dùng bị ẩn qua cài đặt bảo mật và chia sẻ. Do đó, bảo mật Apex và thực thi quy tắc chia sẻ là quan trọng nhất.

Với từ khóa chia sẻ

Nếu bạn sử dụng từ khóa này, thì mã Apex sẽ thực thi cài đặt Chia sẻ của người dùng hiện tại thành mã Apex. Điều này không thực thi quyền Hồ sơ, chỉ cài đặt chia sẻ mức dữ liệu.

Chúng ta hãy xem xét một ví dụ trong đó, Người dùng của chúng tôi có quyền truy cập vào 5 bản ghi, nhưng tổng số bản ghi là 10. Vì vậy, khi lớp Apex sẽ được khai báo với Từ khóa "Với Chia sẻ", nó sẽ chỉ trả về 5 bản ghi mà người dùng có quyền truy cập vào.

Example

Trước tiên, hãy đảm bảo rằng bạn đã tạo ít nhất 10 bản ghi trong đối tượng Khách hàng với "Tên" của 5 bản ghi là "Khách hàng ABC" và 5 bản ghi còn lại là "Khách hàng XYZ". Sau đó, tạo quy tắc chia sẻ sẽ chia sẻ 'Khách hàng ABC' với tất cả Người dùng. Chúng tôi cũng cần đảm bảo rằng chúng tôi đã đặt đối tượng OWD of Customer là Riêng tư.

Dán mã được cung cấp bên dưới vào khối Ẩn danh trong Bảng điều khiển dành cho nhà phát triể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();

Không có Từ khoá Chia sẻ

Như tên cho thấy, lớp được khai báo với từ khóa này thực thi ở chế độ Hệ thống, tức là, bất kể Người dùng truy cập vào bản ghi, truy vấn sẽ tìm nạp tất cả các bản ghi.

// 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.

Đặt bảo mật cho Apex Class

Bạn có thể bật hoặc tắt lớp Apex cho cấu hình cụ thể. Các bước tương tự được đưa ra dưới đây. Bạn có thể xác định hồ sơ nào nên có quyền truy cập vào lớp nào.

Đặt bảo mật lớp Apex từ trang danh sách lớp

Step 1 - Từ Thiết lập, nhấp vào Phát triển → Lớp Apex.

Step 2- Nhấp vào tên của lớp mà bạn muốn hạn chế. Chúng tôi đã nhấp vào CustomerOperationClass.

Step 3 - Nhấp vào Bảo mật.

Step 4 - Chọn cấu hình bạn muốn bật từ danh sách Cấu hình có sẵn và nhấp vào Thêm hoặc chọn cấu hình bạn muốn vô hiệu hóa từ danh sách Cấu hình đã bật và nhấp vào Xóa.

Step 5 - Nhấp vào Lưu.

Đặt Apex Security từ Permission Set

Step 1 - Từ Thiết lập, nhấp vào Quản lý Người dùng → Bộ Quyền.

Step 2 - Chọn một tập hợp quyền.

Step 3 - Nhấp vào Apex Class Access.

Step 4 - Nhấp vào Chỉnh sửa.

Step 5 - Chọn các lớp Apex mà bạn muốn bật từ danh sách Các lớp Apex Có sẵn và nhấp vào Thêm hoặc chọn các lớp Apex mà bạn muốn vô hiệu hóa từ danh sách Lớp Apex Đã bật và nhấp vào loại bỏ.

Step 6 - Nhấp vào nút Lưu.