2010-08-12 3 views
0

J'ai besoin de récupérer tous les SPUser à partir d'un SPGroup. Malheureusement, le groupe peut contenir des groupes Active Directory, donc un simple SPGroup.Users ne suffit pas (j'obtiendrais juste un seul SPUser pour le groupe AD, avec la propriété IsDomainGroup définie sur true).Comment puis-je lister tous les objets SPUser dans un groupe de fonctions?

Quelqu'un a-t-il une bonne idée comment puis-je obtenir une liste de tous les SPUser, descendant dans tous les groupes Active Directory contenus dans un SPGroup? Existe-t-il une alternative à SPGroup.ContainsCurrentUser qui prend un paramètre SPUser?

Répondre

1

Basé sur une blog post I found, j'ai écrit le code suivant:

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

Je n'aime pas le fait que je dois passer pour chaque utilisateur, et ce code ne trouvera que les utilisateurs AD qui ont déjà été importé dans SharePoint (donc un SPUser existe pour eux), mais c'est assez bon pour moi.

0

Malheureusement, il se peut que tous les membres du groupe AD n'aient pas (encore) un objet SPUser correspondant dans le site.

Dans ce scénario, j'énumérerais tous les membres du groupe de répertoires actifs et les forcerais dans le site avec la méthode EnsureUser() de SPWeb, qui renvoie un SPUser, et en crée un nouveau s'il n'existe pas déjà dans le site.

Pour plus d'informations sur l'énumération des membres du répertoire actif, voir Get List of Users From Active Directory In A Given AD Group.

Questions connexes