2010-08-12 96 views
0

我需要从SPGroup检索所有SPUser的s。不幸的是,该组可能包含Active Directory组,因此仅使用简单的SPGroup.Users是不够的(我只是为AD组获得单个SPUser,而将IsDomainGroup属性设置为true)。如何列出SPGroup中的所有SPUser对象?

有没有人有一个好主意我如何获得所有SPUser的列表,下降到SPGroup中包含的任何Active Directory组? SPGroup.ContainsCurrentUser是否有替代SPUser参数?

回答

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

我不喜欢这样的事实,我要模仿每一个用户,这个代码将只查找已AD用户已被导入到SharePoint(所以他们存在SPUser),但这对我来说已经足够了。

0

不幸的是,并非AD组中的每个成员都有相应的SPUser对象(尚未)。

在这种情况下,我列举的活动目录组的所有成员,迫使他们用的SPWeb的EnsureUser()方法,该方法返回一个SPUser该网站,并创建如果它不存在一个新的在网站中。请参阅Get List of Users From Active Directory In A Given AD Group

相关问题