如何列出SPGroup中的所有SPUser对象?

时间:2010-08-12 11:04:59

标签: sharepoint active-directory spgroup spuser

我需要从SPUser检索所有SPGroup。不幸的是,该组可能包含Active Directory组,因此简单的SPGroup.Users是不够的(我只为AD组获得一个SPUserIsDomainGroup属性设置为true )。

有没有人知道如何获取所有SPUser的列表,降序到SPGroup中包含的任何Active Directory组?是否有SPGroup.ContainsCurrentUser替代SPUser参数?

2 个答案:

答案 0 :(得分:1)

基于blog post I found,我编写了以下代码:

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),但这样做很好对我来说足够了。

答案 1 :(得分:0)

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

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

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