2008-11-28 7 views
10

quelqu'un peut-il me montrer comment obtenir les utilisateurs dans un certain groupe en utilisant sharepoint? J'ai donc une liste qui contient des utilisateurs et/ou des groupes. Je veux récupérer tous les utilisateurs de cette liste. existe-t-il un moyen de différencier si l'élément de liste est un groupe ou un utilisateur. Si c'est un groupe, j'ai besoin de tous les utilisateurs de ce groupe. J'utilise C#, et j'essaie de faire cela en en faisant une application de console. Im nouveau à sharepoint et im vraiment sauter dans la partie profonde de la piscine ici, toute aide serait très appréciée.obtenir les utilisateurs par groupe dans sharepoint

acclamations ..

+2

Parlez-vous des groupes SharePoint ou Active Directory? – Nico

Répondre

14

La première chose que vous devez savoir est que lorsque vous avez une liste avec un champ utilisateur/groupe, vous devez être au courant de ce type. Lorsque vous avez un utilisateur ou un groupe dans la valeur de l'élément, le type de champ est SPFieldUserValue. Toutefois, si le champ a plusieurs utilisateurs/groupes de sélection, le type de champ est SPFieldUserValueCollection.
Je suppose que votre champ permet à un seul utilisateur/sélection de groupe et vous a déjà les objets suivants:

SPSite site; 
SPWeb web; 
SPListItem item; 

Maintenant, nous allons vérifier la valeur du champ pour un utilisateur/groupe et récupérer une liste de utilisateurs, indépendamment de quel type il est (le nom du champ est "Utilisateurs").

SPFieldUserValue usersField = new SPFieldUserValue(mainWeb, item["Users"].ToString()); 
bool isUser = SPUtility.IsLoginValid(site, usersField.User.LoginName); 
List<SPUser> users = new List<SPUser>(); 

if (isUser) 
{ 
    // add a single user to the list 
    users.Add(usersField.User); 
} 
else 
{ 
    SPGroup group = web.Groups.GetByID(usersField.LookupId); 

    foreach (SPUser user in group.Users) 
    { 
     // add all the group users to the list 
     users.Add(user.User); 
    } 
} 

J'espère que cela vous aide.

TKS, Pedro José
Batista

+0

Comme le dit Sergey Turin ci-dessous, il est préférable d'utiliser SiteGroups car web.Groups ne renvoie que les groupes ayant des droits sur le site Web référencé. –

+0

vous semblez avoir une erreur sur la ligne "users.Add (user.User);". Comme "user" est déjà un objet SPUser, vous pouvez l'ajouter directement à la liste: users.Add (user); – Patric

+0

Où est-ce que je cours ce genre de choses? Est-ce que je mets juste ceci dans un fichier. Js et l'exécute à partir de ma console ou quelque chose? – Batman

5

Note: un objet SPUser peut également être un groupe AD (c'est-à-dire un objet SPUser pourrait exister pour "DOMAIN \ les utilisateurs du domaine" ... qui est pourquoi l'objet SPUser contient également le IsDomainGroup de la propriété.

de cette information, vous pouvez commencer à traverser à travers des groupes AD en utilisant les objets SPPrincipalInfo ... mais il est pas toujours agréable.

Une chose à garder à l'esprit est que le L'objet SPGroup inclut la propriété ContainsCurrentUser qui peut traverser les groupes AD ... cela suppose que vous ayez un objet SPGroup à travailler, cependant.

Profitez-en.
-Scott

0

Ceci est préférable d'utiliser web.SiteGroups au lieu de web.Groups en tant que groupe pourrait être héritée par ce site.

0
private bool IsMember() 
    { 
     bool isMember; 
     SPSite site = new SPSite(SiteURL); 
     SPWeb web = site.OpenWeb(); 
     isMember = web.IsCurrentUserMemberOfGroup(web.Groups["GroupName"].ID); 
     web.Close(); 
     site.Close(); 
     return isMember; 
    } 
+0

Ce n'est pas exactement ce que l'OP a demandé. Il voulait répertorier tous les membres d'un groupe pour vérifier si le compte Xy faisait partie d'un groupe spécifique. – Patric

Questions connexes