2010-11-09 64 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 
    } 
}