我需要获取一个用户列表以及他们在SharePoint上可以访问的文件夹已经在复制文件但是无法理解网站的结构,因此我可以获得正确的列表名称该网站。
我的网址为https://mySPsite/sites/MySite
这是我用来在另一个将文件复制到站点的函数中设置上下文的URL。复制位置的格式略有不同,因为我使用SaveBinaryDirect和文件url,格式为/sites/MySite/Shared Documents/MyFolder/MySubFolder
。文件复制例程工作正常。
我现在要做的是获取文件夹列表和有权访问它们的用户。这些文件夹是MySubFolder
MyFolder
个文件夹
我遇到的问题是,无论文件夹名称的组合如何,我都会收到错误消息,说明在网站中找不到该列表。我使用下面发布的解决方案
using (var ctx = new ClientContext(webUri))
{
var list = ctx.Web.Lists.GetByTitle(listTitle);
var items = list.GetItems(CamlQuery.CreateAllFoldersQuery());
ctx.Load(items, icol => icol.Include(i => i.RoleAssignments.Include( ra => ra.Member), i => i.DisplayName ));
ctx.ExecuteQuery();
foreach (var item in items)
{
Console.WriteLine("{0} folder permissions",item.DisplayName);
foreach (var assignment in item.RoleAssignments)
{
Console.WriteLine(assignment.Member.Title);
}
}
}
由Vadim获取文件夹权限。我明显错过WebUri
和listTitle
之间的联系,并希望得到任何帮助。
答案 0 :(得分:0)
这是正确的代码。成功的关键是设置适当的query.FolderServerRelativeUrl
。
private static void PrintFolderPermission(string webUri, string listTitle)
{
using (var ctx = new ClientContext(webUri))
{
var list = ctx.Web.Lists.GetByTitle(listTitle);
var query = CamlQuery.CreateAllFoldersQuery();
query.FolderServerRelativeUrl = "/sites/custom-dev/Shared documents/MyFolder/MySubfolder";
var items = list.GetItems(query);
ctx.Load(items, icol => icol.Include(i => i.RoleAssignments.Include(ra => ra.Member), i => i.DisplayName));
ctx.ExecuteQuery();
foreach (var item in items)
{
Debug.WriteLine(item.DisplayName + " folder permissions");
foreach (var assignment in item.RoleAssignments)
{
Debug.WriteLine(assignment.Member.Title);
}
}
}
}