2009-11-13 80 views
0

我需要鎖定對SharePoint庫的訪問權限:只有屬於與該庫關聯的所有組的用戶應具有讀取權限;其他人不應該被允許閱讀。如何在SharePoint文檔庫上設置獨佔權限?

比方說,我有一個文檔庫,涉及三個項目:

12345 
13579 
24680 

我有屬於一個或多個項目的用戶:

Joe: 12345, 24680 
Jane: 13579, 24680 
Jim: 24680 
Harry: 12345, 13579, 24680 

我需要限制其訪問該圖書館只有屬於所有項目的用戶。也就是說,只有哈利才能進入;其他人應該被拒絕。我們會使用以每個項目命名的SharePoint組來表示「所有」關係。

更多的細節編輯:

我們計劃創建文檔lib和通過工作流設置初始安全。然而,更多的項目可能會與doclib創建後相關聯,基於表單中輸入的信息,人們可以通過管理員進入和退出項目組(例如,對於促銷,新員工......)

現在,如果表單提交在初始設置後添加了新項目,管理員可能會根據需要創建一個新組,並將其分配給doclib。最終,我們會在工作流程中執行此操作。

目前,我們正在編寫代碼來分配初始安全狀態的網站:

我們掃描的用戶輸入到表單中的項目清單,如果有必要創建新的項目組,創建一個網站,一對doclibs,打破角色繼承和分配我們的組閱讀訪問doclib。我們爲每個項目組添加一些用戶。

此時,任何這些用戶都具有讀權限。我們不知道如何做的是將訪問權限限制爲僅屬於所有組的成員的用戶。

+0

我想寫一個詳細的回覆,但是我想到我認爲這裏沒有足夠的細節。 doclib-project從屬關係是靜態的嗎?如果他們改變,他們將如何/何時改變?在庫中添加/刪除/修改文檔時,它們是否會發生更改?您的問題真的是關於如何編寫代碼來管理安全組,或者您的問題更多地是關於捕獲對庫或其文檔的任何更改? – 2009-11-13 03:59:57

+0

好問題!我編輯了這篇文章......讓我知道你是否需要更多。 – Val 2009-11-13 07:48:32

回答

3

找到了對自己狠..的SharePoint也不AD以這種方式工作,我會回到繪圖板,因爲這隻會引起疼痛;)

我會脫鉤組和管理他們的分配給整個SharePoint文檔庫和同步權限,就像Koen提到的那樣。 例如您可以將組成員資格與用於將他們連接到文檔庫的組分開管理。然後,您需要一個過程來枚舉這些單獨的組,並根據您的業務規則將其中的用戶分配給文檔庫。最好是脆。

+0

你是對的,我們正在努力對自己。我們正在改變要求... – Val 2009-12-03 06:37:06

1

您可以將文檔庫設置爲BreakRoleInheritance,並分別爲您的項目設置權限。

這是一個例子:

SPSecurity.RunWithElevatedPrivileges(delegate() 
{ 
    using (SPSite site = new SPSite("http://...")) 
    { 
     using (SPWeb web = site.OpenWeb()) 
     { 
      web.AllowUnsafeUpdates = true; 
      SPRoleType role = SPRoleType.Reader; 
      SPRoleAssignment assignment = 
       new SPRoleAssignment(web.Groups["groupname"]); 
      assignment.RoleDefinitionBindings.Add(
       web.RoleDefinitions.GetByType(role)); 

      SPList list = web.Lists["name"]; 
      SPListItemCollection items = list.GetItems(new SPQuery()); 
      foreach (SPListItem item in items) 
      { 
       if (!item.HasUniqueRoleAssignments) 
        item.BreakRoleInheritance(false); 

       while (item.RoleAssignments.Count != 0) // remove all 
         item.RoleAssignments.Remove(
         item.RoleAssignments.Count - 1); 

       item.RoleAssignments.Add(assignment); 
      } 
     } 
    } 
}); 
+0

是的,我們打算打破繼承。我在問如何設置權限。我們無法手動完成 - 我們必須在工作流程中的某個時間點以編程方式進行。我希望以一種聲明的方式來做到這一點,這樣我只需將用戶添加到各個組中,並將項目的DocLib設置爲不同的組。這基本上適用於OR關係:我們中斷繼承,並將DocLib的讀取訪問權限設置爲組1,2或3的成員,並且如果用戶是1,2或3的成員,則系統允許他們進入。我們將DocLib的閱讀權限設置爲第1,2和3組的成員? – Val 2009-11-13 01:50:52

0

我能想到實現這一目標的唯一方法是創建通過刪除所有的權限,然後再加入他們每天更新您的文檔庫中的自定義計時器作業過夜。這意味着加入這些項目的人將不得不等待一天才能獲得訪問權限。您只需創建group1的所有用戶的集合,並檢查每個用戶是否存在於組2,3,...以及他們是否將它們從集合中刪除。