Получение членов доменной группы AD с использованием API Sharepoint - PullRequest
16 голосов
/ 30 ноября 2010

В своем коде Sharepoint я отображаю список всех определенных пользователей с помощью:

foreach (SPUser user in SPContext.Current.Web.AllUsers)
{
    ...
}

Большая часть заключается в том, что я могу добавить группу безопасности домена в группу Sharepoint (например, «Посетители»), добавив таким образом много пользователей.сразу (более простое администрирование).Но мой код не видит этих пользователей, по крайней мере, до тех пор, пока они не войдут в первый раз (если у них есть достаточные права).В этом случае я вижу только экземпляр объекта группы безопасности домена SPUser с IsDomainGroup, установленным на true.

Возможно ли получить членов группы домена с помощью Sharepoint не прибегая к запросам Active Directory (чего я бы предпочел избегать, потому что вам, вероятно, нужны достаточные права для выполнения таких операций = больше администрирования: права на Sharepoint + права на AD).

Ответы [ 2 ]

32 голосов
/ 27 мая 2011

Вы можете использовать метод SPUtility.GetPrincipalsInGroup ( MSDN ).

Все параметры говорят сами за себя, кроме string input, который является именем учетной записи NT группы безопасности:

bool reachedMaxCount;
SPWeb web = SPContext.Current.Web;
int limit = 100;
string group = "Domain\\SecurityGroup";
SPPrincipalInfo[] users = SPUtility.GetPrincipalsInGroup(web, group, limit, out reachedMaxCount);

Обратите внимание, что этот метод не разрешает вложенные группы безопасности. Кроме того, исполняющий пользователь должен иметь разрешение на просмотр информации о пользователе (SPBasePermissions.BrowseUserInfo) в текущей сети.

Обновление:

private void ResolveGroup(SPWeb w, string name, List<string> users)
{
    foreach (SPPrincipalInfo i in SPUtility.GetPrincipalsInGroup(w, name, 100, out b))
    {
        if (i.PrincipalType == SPPrincipalType.SecurityGroup)
        {
          ResolveGroup(w, i.LoginName, users);
        }
        else
        {
          users.Add(i.LoginName);
        }
    }
}

List<string> users = new List<string>();
foreach (SPUser user in SPContext.Current.Web.AllUsers)
{
  if (user.IsDomainGroup)
    {
      ResolveGroup(SPContext.Current.Web, user.LoginName, users);
    }
    else
    {
      users.Add(user.LoginName);
    }
}

Edit:

[...] прибегая к запросам Active Directory (этого я бы предпочел избегать, потому что вам, вероятно, необходимы достаточные права для выполнения таких операций [...]

Это правда, конечно, но SharePoint также должен искать AD. Вот почему учетная запись службы пула приложений должна иметь доступ для чтения к AD. Другими словами, вы должны безопасно выполнять запросы к AD, если выполняете свой код, возвращенный к учетной записи процесса.

6 голосов
/ 29 мая 2011

Я бы посоветовал вам просто запросить Active Directory напрямую.Вы тратите много усилий, чтобы заставить SharePoint сделать этот вызов для вас AD.Каждая учетная запись, имеющая доступ пользователя домена, должна иметь возможность запрашивать группы AD, вложенные в SharePoint.Я бы просто пошел к источнику.

Таким образом, вам не нужно беспокоиться о разрешениях для пользователей или что-то еще.По моему мнению, попытка прокси-сервера через SharePoint только усложнит вашу жизнь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...