Salesforce 如何将SOQL结果限制为用户可以访问的结果

Salesforce 如何将SOQL结果限制为用户可以访问的结果,salesforce,Salesforce,我拥有组织的管理API访问权限。我希望运行相同的SOQL查询,但返回对我组织中的各个用户可见的结果:为用户A运行“从帐户中选择名称”,应该只返回用户A可以访问的帐户名称 我知道,如果每个用户都向我的应用程序提供他们的密码和安全令牌,那么这很容易,因此我可以作为他们登录并运行查询,但我只想使用我的管理员帐户来执行此操作 这非常类似于: 但在这种情况下,我确实可以访问数据,我只想过滤它,就好像请求来自特定用户一样。看起来有一个名为System.RunAs()的Apex“单元测试”方法,看起来很接近

我拥有组织的管理API访问权限。我希望运行相同的SOQL查询,但返回对我组织中的各个用户可见的结果:为用户A运行“从帐户中选择名称”,应该只返回用户A可以访问的帐户名称

我知道,如果每个用户都向我的应用程序提供他们的密码和安全令牌,那么这很容易,因此我可以作为他们登录并运行查询,但我只想使用我的管理员帐户来执行此操作

这非常类似于:


但在这种情况下,我确实可以访问数据,我只想过滤它,就好像请求来自特定用户一样。看起来有一个名为System.RunAs()的Apex“单元测试”方法,看起来很接近,但我想通过REST来运行它。

我认为您可以使用
HasReadAccess
UserRecordAccess
表中筛选第一个SOQL查询

您可以尝试先构建一组
记录ID
,然后使用它来过滤帐户查询

Set<ID> sRecordIDs = [SELECT RecordID FROM UserRecordAccess WHERE UserId = :u AND HasReadAccess = True];
Account[] accs =[SELECT ID,Name FROM Account WHERE Id in :sRecordIDs];
Set sRecordIDs=[从UserRecordAccess中选择RecordID,其中UserId=:u和hasreaddaccess=True];
账户[]账户=[选择ID,从ID所在账户中选择名称:sRecordIDs];

有关

的更多详细信息,感谢您的建议。我一直在研究UserRecordAccess,但我不清楚它是否代表PDF“用户记录访问:引擎盖下”中描述的“对象记录、对象共享和组维护表”的逻辑联合,或者它是否是单独的,可能只是描述对象共享。知道吗?UserRecordAccess与对象记录和用户有关。您可以将该表用作记录共享组的包装器。这是我所知道的为特定用户过滤数据的唯一方法(您最初的问题:)我刚刚做了一些测试,乍一看我认为这应该对我有用!“最多200条记录”部分有点遗憾,但这可能就足够了。谢谢到今天为止,当我在开发人员控制台中测试它时,它失败了。错误消息:Where子句必须包含RecordId=[single ID]或[ID列表]中的RecordId。本页的注释证实了这一点: