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