Это одно из тех самых общих требований, которое очень быстро становится очень сложным. Похоже, они пытаются создать какой-то аудит безопасности.
Если вы предполагаете, что на каждом сайте есть только группы SharePoint, заполненные пользователями SharePoint, и все наследует разрешения, тогда это будет немного проще. Вы можете рекурсивно перебирать каждый SPWeb (и дочерний SPWeb в каждом SPWeb), чтобы найти все SPGroups . Затем, используя словарь, вы будете отслеживать найденных пользователей и уровень их разрешений. Их уровень разрешений определяется их членством в группе, и вы, вероятно, будете использовать web.RoleAssignments.GetAssignmentByPrincipal(group)
( GetAssignmentByPrincipal ) для получения списка назначений (например: Read, Contribute и т. Д.).
Однако сценарий, вероятно, НЕ тот, что есть у вашего клиента. О чем нужно подумать (некоторые легче преодолеть, чем другие):
- Что происходит, когда пользователь существует в нескольких группах на одном сайте?
- Пользователи с индивидуальными правами доступа к сайту?
- Нарушено наследование разрешений на уровне SPWeb? Как насчет списка разрешений? Пункт разрешений? Что происходит, когда вы видите ограниченный доступ?
- Группы AD используются где-нибудь? Нужно ли перечислять всех пользователей в каждой группе AD? А как насчет специальных групп, таких как «ВСЕ АВТОРИЗОВАННЫЕ ПОЛЬЗОВАТЕЛИ»?
Реально, очень сложно написать точный аудит безопасности. Лучшее решение для этого, вероятно, состоит в том, чтобы найти кого-то, кто знаком с настройкой безопасности, проходящей через каждый сайт, чтобы исправить их.