2010-08-12 58 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

相關問題