Как я могу перечислить все объекты SPUser в SPGroup? - PullRequest
0 голосов
/ 12 августа 2010

Мне нужно получить все SPUser из SPGroup.К сожалению, группа может содержать группы Active Directory, поэтому простого SPGroup.Users недостаточно (я бы просто получил один SPUser для группы AD со свойством IsDomainGroup, установленным в значение true).

У кого-нибудь есть хорошая идея, как я могу получить список всех SPUser, относящихся к любой группе Active Directory, содержащейся в SPGroup?Есть ли альтернатива SPGroup.ContainsCurrentUser, которая принимает параметр SPUser?

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Основываясь на найденном мной блоге , я написал следующий код:

private static List<SPUser> ListUsers(SPWeb web, SPPrincipal group)
{
    try
    {
        web.Site.CatchAccessDeniedException = false;
        var users = new List<SPUser>();
        foreach(SPUser user in web.SiteUsers)
        {
            using(var userContextSite = new SPSite(web.Site.ID, user.UserToken))
            {
                try
                {
                    using (var userContextWeb = userContextSite.OpenWeb(web.ID))
                    {
                        try
                        {
                            if (userContextWeb.SiteGroups[group.Name]
                                .ContainsCurrentUser)
                                    users.Add(user);
                        }
                        catch (SPException)
                        {
                            // group not found, continue
                        }
                    }
                }
                catch(UnauthorizedAccessException)
                {
                    // user does not have right to open this web, continue
                }
            }
        }
        return users;
    }
    finally
    {
        web.Site.CatchAccessDeniedException = true;
    }
}

Мне не нравится тот факт, что мне приходится выдавать себя за каждого отдельного пользователя, и этот код найдет только тех пользователей AD, которые уже были импортированы в SharePoint (поэтому для них существует SPUser), но этого достаточно для я.

0 голосов
/ 12 августа 2010

К сожалению, может случиться так, что не каждый член группы AD имеет соответствующий объект SPUser на сайте (пока).

В этом сценарии я бы перечислил всех членов группы активных каталогов и принудительно ввел бы их на сайт с помощью метода SPWeb EnsureUser(), который возвращает SPUser и создает нового, если он не ' т уже существует на сайте.

Инструкции по перечислению членов активного каталога см. В Получение списка пользователей из Active Directory в данной группе AD .

...