2010-11-09 3 views
2

У меня есть требование от клиента, что он хочет знать отличную информацию о пользователях с сайтов, а на подсайтах, имеющих доступ к сайту. Для каждого дочернего сайта существуют отдельные группы (вклад, утверждение и полный доступ). Из них все группы находят различную пользовательскую информацию.Как получить отдельных пользователей с сайта и его подсайтов?

Как мы можем это сделать с помощью объектной модели? Пожалуйста, помогите мне.

Заранее спасибо.

+0

Вы ищете список пользователей на сайт или список сайтов для пользователя? – knight0323

+0

Список пользователей на сайт. но разных пользователей. – James123

ответ

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 
    } 
}