【问题标题】:How to limit SOQL results to those accessible to a user如何将 SOQL 结果限制为用户可以访问的结果
【发布时间】:2012-09-11 01:32:58
【问题描述】:

我对我的组织具有管理员 API 访问权限。我想运行相同的 SOQL 查询,但返回对我组织中的各个用户可见的结果:为用户 A 运行“SELECT Name FROM Account”,应该只返回用户 A 可以访问的帐户名称。

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

这非常类似于:

Salesforce: impersonation using the API

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

【问题讨论】:

    标签: salesforce


    【解决方案1】:

    我认为您可以使用 UserRecordAccess 表中的 HasReadAccess 过滤第一个 SOQL 查询。

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

    Set<ID> sRecordIDs = [SELECT RecordID FROM UserRecordAccess WHERE UserId = :u AND HasReadAccess = True];
    Account[] accs =[SELECT ID,Name FROM Account WHERE Id in :sRecordIDs];
    

    更多详情请关注official documentation

    【讨论】:

    • 感谢您的建议。我一直在研究 UserRecordAccess,我不清楚它是否代表 PDF“用户记录访问:幕后”中描述的“对象记录、对象共享和组维护表”的逻辑联合,或者如果它是独立的,也许只是描述对象共享。有什么想法吗?
    • UserRecordAccess 与对象记录和用户相关。您可以将该表用作 Records-Sharing-Groups 的包装器。这是我知道为特定用户过滤数据的唯一方法(您的原始问题:)
    • 我刚刚做了一些测试,乍一看我认为这应该对我有用! “最多 200 条记录”部分有点遗憾,但这可能就足够了。谢谢!
    • 今天我在开发控制台中测试它失败了。错误消息:Where 子句必须包含 RecordId = [single ID] 或 RecordId IN [list of IDs]。此页面上的注释证实了这一点:salesforce.com/us/developer/docs/api/Content/…
    猜你喜欢
    • 1970-01-01
    • 2014-07-02
    • 2016-03-29
    • 2014-08-04
    • 2016-03-22
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多