我正在尝试确定一种方法来审核给定用户可以查看哪些记录;
对象类型
记录类型
记录数
理想情况下,还可以查看用户可以查看的每个对象/记录类型的哪些字段。
我们需要经常为不同的用户和不同的组织重复这一点,因此希望避免手动确定这一点。
我的第一个想法是使用合作伙伴 WSDL 创建一个应用程序,但想问是否有任何更简单的方法或现有的解决方案。
谢谢大家
我正在尝试确定一种方法来审核给定用户可以查看哪些记录;
对象类型
记录类型
记录数
理想情况下,还可以查看用户可以查看的每个对象/记录类型的哪些字段。
我们需要经常为不同的用户和不同的组织重复这一点,因此希望避免手动确定这一点。
我的第一个想法是使用合作伙伴 WSDL 创建一个应用程序,但想问是否有任何更简单的方法或现有的解决方案。
谢谢大家
我最终使用下面的代码(使用合作伙伴 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();
}
我认为你可以按照文档来解决它,使用类似于这个的查询:
SELECT RecordId
FROM UserRecordAccess
WHERE UserId = [single ID]
AND RecordId = [single ID] //or Record IN [list of IDs]
AND HasReadAccess = true
以下查询返回被查询用户具有读取权限的记录。
此外,您应该添加限制 1 并从记录元数据中获取对象类型、记录类型等。