【问题标题】:Get all SharePoint folder permissions of a particular user programatically以编程方式获取特定用户的所有 SharePoint 文件夹权限
【发布时间】:2011-03-02 20:44:38
【问题描述】:

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

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



                 }

不仅是名称,我还需要该文件夹的权限,请帮忙!!

谢谢

【问题讨论】:

  • 不重复,但答案在另一篇文章中 - folder.Item.RoleAssignments
  • 如果我使用 while(folder.Item.RoleAssignments.Count > 0),我收到错误“错误 4 'Microsoft.SharePoint.SPRoleAssignmentCollection' 不包含 'Count' 的定义并且没有扩展名可以找到接受“Microsoft.SharePoint.SPRoleAssignmentCollection”类型的第一个参数的方法“Count”(您是否缺少 using 指令或程序集引用?)”

标签: c# sharepoint


【解决方案1】:

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

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

【讨论】:

  • foreach (SPRoleAssignment assignment = folder.Item.RoleAssignments) { Console.WriteLine("Permissions for '{0}'", assignment.Member.LoginName);//它成功了 非常感谢跨度>
【解决方案2】:

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

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);
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2014-07-03
    • 1970-01-01
    • 2011-04-23
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多