2010-11-09 90 views
2

我從客戶那裏得到了一個要求,他想知道來自網站的不同用戶信息,以及那些有權訪問網站的子網站。每個子網站都有單獨的組(貢獻,批准和完全訪問)。從這些所有組中找到不同的用戶信息。如何從網站及其子網站獲取不同的用戶?

我們如何使用Object模型做到這一點?請幫助我。

在此先感謝。

+0

您是在查找每個站點的用戶列表或每個用戶的站點列表嗎? – knight0323 2010-11-09 17:39:57

+0

每個站點的用戶列表。但不同的用戶。 – James123 2010-11-09 18:11:37

回答

1

這是非常迅速變得非常困難的那些非常普遍的要求之一。這聽起來像是他們試圖創建某種安全審計。

如果您假設每個站點只有SharePoint組填充SharePoint用戶,並且所有內容都是繼承權限,那麼這是一個小小更容易。您可以遞歸遍歷每個SPWeb(以及每個SPWeb中的子SPWeb)以查找所有SPGroups。然後,使用字典,您可以跟蹤您找到的用戶及其權限級別。他們的許可級別取決於他們在小組中的成員身份,並且您可能會使用web.RoleAssignments.GetAssignmentByPrincipal(group)GetAssignmentByPrincipal)獲取作業列表(例如:閱讀,貢獻等)。

但是,該情況可能不是您的客戶所擁有的。需要考慮的事情(一些比其他人更容易克服):

  • 當用戶在同一站點中的多個組中存在時會發生什麼?
  • 具有個人網站權限的用戶?
  • 在SPWeb級別損壞的權限繼承?列表權限呢?項目權限?當您看到有限訪問時會發生什麼?
  • AD組是否在任何地方使用?您是否必須列出每個AD組中的所有用戶?那麼像「所有認證用戶」這樣的特殊團體呢?

實際上,編寫準確的安全審計非常困難。對此的最佳解決方案可能是找到熟悉如何通過每個站點設置安全性來解決問題的人員。

2

SharePoint 2010 - 當有人詢問誰有權訪問網站時,我經常使用此PowerShell腳本。這不包括直接授予用戶權限的用戶或網站集管理員,但仍然有幫助。

您必須在SP2010服務器上運行此操作。

#Get a list of groups in a site, then a list of people in each group 

Add-PSSnapIn Microsoft.SharePoint.PowerShell 

$spWeb = "http://sharepoint/site/" 
foreach($group in ((Get-SPWeb $spWeb).Groups)){ 
    foreach($user in $Group.Users) 
    {$group.Name + " - " + $user.Name 
    } 
}