2009-12-10 4 views
2

Je travaille sur une application Web interne qui utilisera des groupes SharePoint prédéfinis pour déterminer le niveau de sécurité d'un utilisateur. J'ai fait des recherches et j'ai trouvé le service web "usergroup" de SharePoint qui a la méthode "GetUserCollectionFromGroup()" qui va lister tous les utilisateurs d'un groupe SharePoint donné.Indique si l'utilisateur existe dans le groupe SharePoint via le service Web

Le problème que je rencontre concerne certains groupes SharePoint prédéfinis auxquels des groupes Active Directory ont été ajoutés, et non les utilisateurs individuels. Ainsi, lorsque j'appelle GetUserCollectionFromGroup ("Members"), je récupère une seule entrée pour le groupe Active Directory "DOMAIN \ domain users". Existe-t-il un moyen de vérifier si un utilisateur ou un groupe Active Directory auquel appartient l'utilisateur appartient à un groupe SharePoint en utilisant uniquement les services Web SharePoint? Ou dois-je vérifier le groupe SharePoint, puis rechercher tous les groupes Active Directory pour voir si cet utilisateur est également membre?

Répondre

2

Les groupes de sécurité Active Directory sont considérés comme des "utilisateurs" dans SharePoint. Vous ne pouvez pas accomplir cela comme vous le voulez. Mais comme vous avez le groupe DOMAIN \, vous pouvez étendre votre code après avoir tapé l'API SharePoint webservices et utiliser l'espace de noms System.DirectoryServices pour résoudre vos utilisateurs. Vous pouvez trouver un bon exemple sur la façon d'obtenir des utilisateurs d'un groupe here.

+0

Merci, j'espérais que tout pourrait être fait par le biais des services Web SharePoint, mais ce n'est pas si mal. Ça semble fonctionner bien maintenant. – Blather

1

Le code ci-dessous vérifie si l'utilisateur appartient à un groupe particulier. Cela inclut la vérification de tous les groupes AD membres. Vous devrez créer un service Web SharePoint personnalisé pour appeler ce code à partir d'une machine distante. HTH

public static bool UserIsInGroup(SPUser user, SPGroup group) 
     { 
      try 
      { 
       using (SPSite site = new SPSite(group.ParentWeb.Site.ID, user.UserToken)) 
       { 
        using (SPWeb web = site.OpenWeb(group.ParentWeb.ID)) 
        { 
         SPGroup impersonatedGroup = web.SiteGroups[group.Name]; 

         return impersonatedGroup.ContainsCurrentUser; 

        } 

       } 



      } 
      catch (Exception e) 
      { 

       ///TODO: Log the exception 
        return false; 

      } 
     } 
+0

Merci pour l'aide, le seul problème est que je n'ai pas accès à installer quoi que ce soit sur le serveur SharePoint réel. Le seul accès que j'aurai à installer est sur un serveur web séparé sur le réseau. – Blather

Questions connexes