Apex - 安全性

Apex 安全性是指应用安全设置并在运行代码上强制执行共享规则的过程。 Apex 类具有可通过两个关键字控制的安全设置。

数据安全和共享规则

Apex通常在系统上下文中运行,即当前用户的权限。 代码执行期间不考虑字段级安全性和共享规则。 只有匿名块代码才会在执行该代码的用户的许可下执行。

我们的 Apex 代码不应向用户公开通过安全和共享设置隐藏的敏感数据。 因此,Apex 安全性和执行共享规则最为重要。

使用 Sharing 共享关键字

如果您使用此关键字,则 Apex 代码会将当前用户的共享设置强制执行到 Apex 代码。 这不会强制执行个人资料权限,仅强制执行数据级别共享设置。

让我们考虑一个例子,其中我们的用户可以访问 5 条记录,但记录总数为 10 条。因此,当使用"WithSharing"关键字声明 Apex 类时,它将仅返回 5 条记录 用户有权访问的内容。

示例

首先,确保您已在客户对象中创建至少 10 条记录,其中 5 条记录的"名称"为"ABC 客户",其余 5 条记录为"XYZ 客户"。 然后,创建一个共享规则,与所有用户共享"ABC 客户"。 我们还需要确保已将 Customer 对象的 OWD 设置为 Private。

将下面给出的代码粘贴到开发者控制台中的匿名块。

// 共享类
public with sharing class MyClassWithSharing {
   // 查询获取10条记录
   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;
   }
}

// 保存上面的类然后执行如下
// 使用类的对象执行类
MyClassWithSharing obj = new MyClassWithSharing();
Integer ListSize = obj.executeQuery();

没有共享关键字

顾名思义,使用此关键字声明的类在系统模式下执行,即无论用户对记录的访问权限如何,查询都将获取所有记录。

// 没有共享的类
public without sharing class MyClassWithoutSharing {
   List<apex_customer__c> CustomerList = [SELECT id, Name FROM APEX_Customer__c LIMIT 10];
   
   // 查询要获取 10 条记录,这将返回所有记录
   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;
   }
}
// 输出将是 10 条记录。

设置 Apex 类的安全性

您可以为特定配置文件启用或禁用 Apex 类。 下面给出了相同的步骤。 您可以确定哪个配置文件应该有权访问哪个类。

从类列表页面设置 Apex 类安全性

步骤 1 − 从"设置"中,单击 Develop → Apex Classes。

设置 Apex Cass 安全步骤 1

步骤 2 − 单击要限制的类的名称。 我们点击了 CustomerOperationClass。

设置 Apex Cass 安全步骤2

步骤 3 − 单击"安全"。

设置 Apex Cass 安全步骤3

步骤 4 − 从"可用配置文件"列表中选择要启用的配置文件,然后单击"添加",或者从"已启用配置文件"列表中选择要禁用的配置文件,然后单击"删除"。

设置 Apex 类安全性步骤 3

步骤 5 − 单击"保存"。

从权限集中设置 Apex 安全性

步骤 1 − 从"设置"中,单击 Manage Users → Permission Sets。

从权限集第 1 步设置 Apex 类安全性

步骤 2 − 选择权限集。

从权限集第 2 步设置 Apex 类安全性

步骤 3 − 单击"Apex 类访问"。

从权限集第 3 步设置 Apex 类安全性

步骤 4 − 单击"编辑"。

从权限集第 4 步设置 Apex 类安全性

步骤 5 − 从"可用 Apex 类"列表中选择要启用的 Apex 类,然后单击"添加",或者从"已启用 Apex 类"列表中选择要禁用的 Apex 类,然后单击"删除"。

从权限集第 5 步设置 Apex 类安全性

步骤 6 − 单击"保存"按钮。