salesforce developer console 匿名执行是以什么身份执行的

在 Salesforce 开发者控制台中的"匿名执行"代码(Anonymous Apex)是以当前登录用户的身份执行的。执行时会根据该用户的权限、共享设置和数据访问权限来决定代码的实际访问范围。

因此,在匿名执行中:

  • 代码会遵守当前用户的数据访问控制(Sharing Rules),只能访问当前用户有权限查看或编辑的数据。
  • 如果需要以"系统模式"执行(忽略共享规则),可以在匿名 Apex 中使用 without sharing 关键字声明一个类并在其中执行相关逻辑。

如果管理员账号对某个字段不可见,那么在开发者控制台的匿名执行中也无法访问该字段。这是因为匿名执行会遵循当前用户的字段级别安全性(Field-Level Security,FLS),即便是管理员账号,如果该字段在配置中对管理员不可见,匿名执行也无法访问。

解决方案

如果需要在匿名执行中访问受限字段,可以尝试以下方法:

  1. 检查和调整字段级别安全性:确认管理员账号是否具备该字段的读取或写入权限。
  2. 在系统模式下执行代码 :将需要的逻辑封装到 without sharing 的类方法中,并通过执行匿名 Apex 调用该方法。注意,这仅忽略共享规则,但不忽略字段级别的安全性。因此,仍然需要确保管理员对该字段的访问权限已被授予。
  3. 权限集或配置文件更新:直接为管理员配置所需字段的访问权限。这样,匿名执行时可以直接访问这些字段。

系统模式 下执行代码时,Salesforce 会忽略共享规则(Sharing Rules) ,但不会忽略字段级别安全性(Field-Level Security, FLS)。因此,即使代码运行在系统模式下,如果当前用户对某个字段没有可见权限,系统模式下的代码依然无法访问该字段。

关键点总结

  • 系统模式:忽略共享规则,允许代码访问所有记录数据,但不忽略字段级别安全性。
  • 字段级别安全性(FLS):即使在系统模式下,字段级别安全性仍然生效,无法访问当前用户无权限查看的字段。

解决方案

如果希望在系统模式下访问特定字段,可以考虑:

  1. 检查权限配置:确保管理员或执行代码的用户有该字段的访问权限。
  2. 绕过字段级别安全性 :在某些情况下,可以在自定义接口(如 REST API)中,通过 Schema.DescribeFieldResult 检查字段权限并动态执行逻辑。

不过存在一种情况,即在系统模式下执行的 Apex 代码可以忽略字段级别安全性(FLS) 。在 Salesforce 中,触发器(Triggers)批处理(Batch Apex)计划任务(Scheduled Apex) 以及某些 非匿名执行 的 Apex 类会在系统模式下运行,并能够访问所有字段和记录数据,而不受字段级别安全性的限制。

因此,匿名执行(Anonymous Apex) 是遵循当前用户的字段权限的,但其他在系统模式下执行的 Apex(如触发器和批处理)可以直接访问字段,即使当前用户没有权限。

区分匿名执行与系统模式下的执行

  1. 匿名执行(Anonymous Apex):始终遵循当前用户的字段级别安全性。
  2. 触发器、批处理和计划任务:在系统模式下运行,不受字段级别安全性影响,能够访问所有字段。

示例场景

  • 如果在开发者控制台使用匿名执行代码测试访问字段权限,则会受到字段级别安全性限制。
  • 但在触发器或批处理类中,即使用户没有对某个字段的访问权限,代码依然可以访问并操作该字段。

因此,如果希望绕过字段级别安全性,可以通过触发器或批处理类的方式来执行逻辑,这些运行在系统模式下的代码不受字段权限限制。

相关推荐
DEARM LINER16 分钟前
mysql 巧妙的索引
数据库·spring boot·后端·mysql
码农幻想梦1 小时前
实验九 视图的使用
前端·数据库·oracle
影子落人间1 小时前
Oracle创建存储过程,创建定时任务
数据库·oracle
大G哥1 小时前
02、Oracle过滤和排序数据
数据库·oracle
安科瑞刘鸿鹏2 小时前
校园建筑用电安全监测装置 电气火灾监测预防设备功能介绍
运维·服务器·网络·嵌入式硬件·安全·能源
代码吐槽菌3 小时前
基于SSM的汽车客运站管理系统【附源码】
java·开发语言·数据库·spring boot·后端·汽车
伏虎山真人3 小时前
开源数据库 - mysql - 组织结构(与oracle的区别)
数据库·mysql·开源
茶颜悦色vv4 小时前
网络搜索引擎Shodan(2)
网络·安全·web安全·搜索引擎·网络安全
精致先生4 小时前
问题记录01
java·数据库·mybatis