1

我正在尝试确定一种方法来审核给定用户可以查看哪些记录;

对象类型

记录类型

记录数

理想情况下,还可以查看用户可以查看的每个对象/记录类型的哪些字段。

我们需要经常为不同的用户和不同的组织重复这一点,因此希望避免手动确定这一点。

我的第一个想法是使用合作伙伴 WSDL 创建一个应用程序,但想问是否有任何更简单的方法或现有的解决方案。

谢谢大家

4

2 回答 2

0

我最终使用下面的代码(使用合作伙伴 WSDL 的 C#)来了解用户可以看到哪些类型的对象。

只是我自己使用的快速'n'dirty实用程序(阅读 - 不是产品代码);

var service = new SforceService();

var result = service.login("UserName", "Password");

service.Url = result.serverUrl;
service.SessionHeaderValue = new SessionHeader { sessionId = result.sessionId };

var queryResult = service.describeGlobal();

int total = queryResult.sobjects.Count();

int batcheSize = 100;
var batches = Math.Ceiling(total / (double)batcheSize);


using (var output = new StreamWriter(@"C:\test\sfdcAccess.txt", false))
{

    for (int batch = 0; batch < batches; batch++)
    {
        var toQuery =
            queryResult.sobjects.Skip(batch * batcheSize).Take(batcheSize).Select(x => x.name).ToArray();

        var batchResult = service.describeSObjects(toQuery);

        foreach (var x in batchResult)
        {
            if (!x.queryable)
            {
                Console.WriteLine("{0} is not queryable", x.name);
                continue;
            }

            var test = service.query(string.Format("SELECT Id FROM {0} limit 100", x.name));

            if(test == null || test.records == null)
            {
                Console.WriteLine("{0}:null records", x.name);
                continue;
            }

            foreach (var record in test.records)
            {
                output.WriteLine("{0}\t{1}",x.name, record.Id);
            }

            Console.WriteLine("{0}:\t{1} records(0)", x.name, test.size);
        }
    }
    output.Flush();
}
于 2012-08-01T23:18:26.397 回答
0

我认为你可以按照文档来解决它,使用类似于这个的查询:

SELECT RecordId
     FROM UserRecordAccess
     WHERE UserId = [single ID]
     AND RecordId = [single ID]      //or Record IN [list of IDs]
     AND HasReadAccess = true

以下查询返回被查询用户具有读取权限的记录。

此外,您应该添加限制 1 并从记录元数据中获取对象类型、记录类型等。

于 2012-07-03T22:27:44.783 回答