2011-03-02 101 views
2

我試圖站點中的所有文件夾(不隱藏)的訪問權限爲特定用戶獲取特定用戶的所有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 



       } 

不僅名字,但我需要的權限文件夾,請幫忙!

感謝

+0

重複? http://stackoverflow.com/questions/302279/sharepoint-how-to-programmatically-manage-spfolder-and-splistitem-permissions – 2011-03-02 21:15:50

+1

不重複,但答案是在其他文章 - 'folder.Item.RoleAssignments' – 2011-03-02 21:33:05

+0

如果我使用while(folder.Item.RoleAssignments.Count> 0),我得到一個錯誤「錯誤'Microsoft.SharePoint.SPRoleAssignmentCollection'不包含'Count'的定義和沒有擴展方法'Count'接受可以找到類型爲「Microsoft.SharePoint.SPRoleAssignmentCollection」的第一個參數(是否缺少使用指令或程序集引用?)「 – chuck 2011-03-02 21:53:49

回答

0

SPWeb.Folders向你網站的「子文件夾」的集合(像_catalogs,列表,...),這些都沒有相關聯的列表項,其中一些如共享文檔可能有一個關聯列表,但在這種情況下,它們是沒有列表項的根文件夾(權限直接來自列表)。

所以,你應該檢查項目爲空(也許在這種情況下,使用ParentListId拿到名單,如果它不是Guid.Empty),然後通過解析子文件夾繼續遞歸

+0

foreach(SPRoleAssignment assignment = folder.Item.RoleAssignments) { Console.WriteLine(」Permissions for '{0}'「,assignment.Member.LoginName); //工作非常感謝 – chuck 2011-03-03 15:49:37

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); 
       } 
      } 
     } 
    } 
} 
相關問題