0

我需要SPUserSPGroup. 不幸的是,该组可能包含 Active Directory 组,因此简单SPGroup.Users是不够的(我只SPUser为 AD 组获取一个,IsDomainGroup属性设置为 true)。

有谁知道如何获得所有的列表SPUser,下降到包含在一个中的任何 Active Directory 组SPGroup?有没有替代方法可以SPGroup.ContainsCurrentUser接受SPUser参数?

4

2 回答 2

1

根据我发现的一篇博客文章,我编写了以下代码:

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

我不喜欢必须模拟每个用户的事实,并且此代码只会找到已导入 SharePoint 的 AD 用户(因此SPUser对他们来说存在),但这对我来说已经足够了。

于 2010-08-12T13:48:22.843 回答
0

不幸的是,可能并非 AD 组的每个成员在站点中都有相应的 SPUser 对象(目前)。

在这种情况下,我将枚举活动目录组的所有成员,并使用 SPWeb 的EnsureUser()方法强制它们进入站点,该方法返回一个SPUser,如果站点中不存在它,则创建一个新成员。

有关枚举 Active Directory 成员的指导,请参阅Get List of Users From Active Directory In A given AD Group

于 2010-08-12T11:10:35.657 回答