如何从站点及其子站点获得不同的用户?

时间:2010-11-09 17:33:35

标签: asp.net sharepoint sharepoint-2007 moss

我得到了客户的要求,他希望了解来自网站的不同用户信息以及可以访问网站的子网站。每个子站点都有单独的组(贡献,批准和完全访问)。从这些组中可以找到不同的用户信息。

我们如何使用对象模型来做到这一点?请帮帮我。

提前致谢。

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:1)

这是非常一般的要求之一,很快就变得非常困难。听起来他们正试图创建某种安全审计。

如果您假设每个站点只有SharePoint组充满了SharePoint用户,并且所有内容都是继承权限,那么它更容易。您可以递归迭代每个SPWeb(以及每个SPWeb中的子SPWeb)以查找所有SPGroups。然后,使用词典,您将跟踪您找到的用户及其权限级别。他们的权限级别取决于他们在群组中的成员资格,您可能会使用web.RoleAssignments.GetAssignmentByPrincipal(group)GetAssignmentByPrincipal)来获取作业列表(例如:阅读,贡献等)。

但是,该方案可能不是您的客户所拥有的。要考虑的事情(有些比其他人更容易克服):

  • 当用户位于同一网站的多个组中时会发生什么?
  • 对网站拥有个人权限的用户?
  • SPWeb级别的权限继承是否已损坏?列表权限怎么样?物品权限?当您看到限制访问时会发生什么?
  • AD群组是否在任何地方使用?您是否必须列出每个AD组中的所有用户?那些像“所有认证用户”这样的特殊群体呢?

实际上,编写准确的安全审计非常困难。对此最好的解决方案可能是找到一个熟悉如何通过每个站点设置安全性来修复它们的人。