2008-11-28 25 views
10

kann mir jemand zeigen, wie man die Benutzer innerhalb einer bestimmten Gruppe mit Sharepoint bekommen?Benutzer nach Gruppe in Sharepoint

so habe ich eine Liste, die Benutzer und oder Gruppen enthält. Ich möchte alle Benutzer in dieser Liste abrufen. Gibt es eine Möglichkeit zu unterscheiden, ob das Listenelement eine Gruppe oder ein Benutzer ist. Wenn es eine Gruppe ist, muss ich alle Benutzer innerhalb dieser Gruppe bekommen.

ich benutze C#, und ich versuche, Thins zu machen, indem Sie es zu einer Konsolenanwendung.

ich bin neu zu Sharepoint und ich bin wirklich in das tiefe Ende des Pools hier springen, würde jede Hilfe sehr geschätzt werden.

prost ..

+2

Sprechen Sie über SharePoint- oder Active Directory-Gruppen? – Nico

Antwort

14

Das erste, was Sie wissen müssen, ist, dass, wenn Sie eine Liste mit einer Benutzer/Gruppe Feld haben Sie seine Art bewusst sein müssen. Wenn Sie innerhalb des Elementwerts einen Benutzer oder eine Gruppe haben, lautet der Feldtyp SPFieldUserValue. Wenn das Feld jedoch mehrere Benutzer/Gruppen aufweist, lautet der Feldtyp SPFieldUserValueCollection.
Ich gehe davon aus, dass Ihr Feld eine einzelne Benutzer/Gruppenauswahl ermöglicht und Sie hat bereits folgende Objekte:

SPSite site; 
SPWeb web; 
SPListItem item; 

Jetzt werden wir den Feldwert für einen Benutzer/Gruppe überprüfen und eine Liste abrufen Benutzer, unabhängig davon, welche Art es ist (der Name des Feldes ist "Benutzer").

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

Ich hoffe, es hilft Ihnen.

TKS,
Pedro José Batista

+0

Wie Sergey Turin unten sagt, ist es besser, SiteGroups zu verwenden, da web.Groups nur die Gruppen mit den Rechten auf das referenzierte Web zurückgibt. –

+0

Sie scheinen einen Fehler in der Zeile "users.Add (user.User);". Da "user" bereits ein SPUser-Objekt ist, können Sie es direkt zur Liste hinzufügen: users.Add (user); – Patric

+0

Wo führe ich dieses Zeug? Lege ich das einfach in eine .js-Datei und starte es von meiner Konsole aus oder so? – Batman

5

Anmerkung: ein SPUser Objekt kann auch eine AD-Gruppe (das heißt sagen, ein SPUser Objekt könnte für "DOMAIN \ Domänen-Benutzer" existieren ... weshalb das SPUser Objekt enthält auch die Eigenschaft IsDomainGroup.

Aus diesen Informationen Sie AD-Gruppen zu durchqueren, durch Verwendung der SPPrincipalInfo Objekte beginnen ... aber es ist nicht immer angenehm.

Eine Sache wert wenn man bedenkt, ist, dass die Das SPGroup-Objekt enthält die ContainsCurrentUser-Eigenschaft Das kann AD-Gruppen durchqueren ... das setzt jedoch voraus, dass Sie ein SPGroup-Objekt haben, von dem Sie arbeiten können.

Genießen.
-Scott

0

Das ist besser web.SiteGroups statt web.Groups als eine Gruppe von dieser Website geerbt werden könnte zu verwenden.

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

Das ist nicht genau das, was das OP gefragt hat. Er wollte alle Mitglieder einer Gruppe no auflisten, um zu überprüfen, ob der Account Xy in einer bestimmten Gruppe ist. – Patric

Verwandte Themen