以编程方式获取特定用户的所有SharePoint文件夹权限

时间:2011-03-02 20:44:39

标签: c# sharepoint

我正在尝试访问特定用户的网站中所有文件夹(未隐藏)的权限

using (SPSite site = new SPSite(SPContext.Current.Web.Url))
             {
                 SPWeb web = site.OpenWeb();
                 SPFolderCollection folders = web.Folders;;
                 foreach (SPFolder folder in web.Folders)
                 {


                     lblFolder.Text += "<br/><STRONG>" + folder.Name + "</STRONG>

<br/>";
 foreach (SPRoleAssignment folderRole in folder.Item.RoleAssignments)
                         { }// throws exception object specifies does not belong to list



                 }

不仅名称,但我需要该文件夹的权限,请帮助!!

由于

2 个答案:

答案 0 :(得分:0)

SPWeb.Folders为您提供了网站“子文件夹”的集合(如_catalogs,Lists,...)这些都没有关联的列表项,其中一些像共享文档可能有一个关联的列表,但在这种情况下,它们是没有列表项的根文件夹(权利直接来自列表)。

所以你应该检查Item是否为null(在这种情况下可能使用ParentListId来获取List,如果它不是Guid.Empty)然后继续通过递归解析SubFolders

答案 1 :(得分:0)

当您抓住文档库的列表项时,您正在抓取文件夹?也就是说,假设他们从顶部继承。

using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
    using (SPWeb web = site.OpenWeb())
    {
        SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["Documents"];
        SPQuery qry = new SPQuery();
        qry.Query = "<Where><Eq><FieldRef Name='Title'><Value Type='Text'>"+title+"</Value></Eq></Where>";
        SPListItemCollection docColl = new SPListItemCollection(qry);
        List<string> perms = new List<string>();

        if (docColl.Count > 0)
        {
            SPListItem fldrItem = docColl[0];
            if (fldrItem.RoleAssignments.Count > 0) {

                SPRoleAssignmentCollection assignColl = fldrItem.RoleAssignments;
                foreach (SPRoleAssignment assignment in assignColl)
                {
                    perms.Add(assignment.Member.LoginName);
                    Console.WriteLine("Perms: " + assignment.Member.LoginName);
                }
            }
        }
    }
}