2017-02-01 4 views
0

Ich habe es geschaffen, die Gruppe I von AAD will erhalten, indemMVC5 wie durch eine azur Active Directory-Benutzergruppe iterieren

ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, 
       async() => await GetTokenForApplication()); 

     // use the token for querying the graph to get the user details 

     var result = await activeDirectoryClient.Groups.Where(u => u.DisplayName.Equals("myGroupName")).ExecuteAsync(); 

mit Aber ich bin nicht sicher, wie durch die Gruppe wiederholen Ich habe und füge alle Benutzer aus dieser Gruppe in eine Liste ein.

+0

Was meinen Sie? Was ist die Art von Ergebnis? Ist es nicht eine Art von Sammlung? – CodingYoshi

+0

Ich würde eine Benutzerklasse erstellen, die die vom ActiveDirectoryClient zurückgegebenen Ergebnisse darstellt, und diese dann der Ergebnismenge wie z. Liste users = erwarten activeDirectoryClient.Groups.Where (u => u.DisplayName.Equals ("myGroupName")). ExecuteAsync(); Dann iteriere die Liste. foreach (Benutzerergebnis in Benutzern) {// tu etwas hier} – Waragi

+0

@Waragi das funktioniert nicht, weil Ergebnis einen IGroup-Typ zurückgibt und es ist nur eine Gruppe, also kann man es nicht einem Benutzertyp zuordnen – yfan183

Antwort

0

tun:

List<IGroup> groups = result.CurrentPage.ToList(); 
foreach (IGroup group in groups) 
{ 
    // do whatever you need to 
} 

EDIT

hat IGroup und Eigenschaft, die mir erlaubt, die Benutzer in dieser Gruppe zu erhalten wie Mitglieder

Ja, es funktioniert aber Sie müssen explizit darum bitten, dass es erweitert wird. Hier ist, wie für die Gruppe alle Benutzer zu erhalten:

var groups = await activeDirectoryClient.Groups 
    .Where(g => g.DisplayName == groupName).Expand(g => g.Members) 
    .ExecuteAsync(); 

var usersForGroup = new List<User>(); 
foreach(IGroup thisGroup in groups) 
{ 
    do 
    { 
     var thisGroupUsers = 
      thisGroup.Members.CurrentPage.Select(m => m as User)).Where(u => u != null); 
     allUsers.AddRange(thisGroupUsers); 

     // get next page asynchronously 
     await thisGroup.Members.GetNextPageAsync(); 
    } while(thisGroup.Members.MorePagesAvailable) 

} 
+0

wie wird das funktionieren? es wird nur 1 Gegenstand in Gruppen geben, das ist die Gruppe, nach der ich gefragt habe. Und es gibt keine Attribute für IGroup, die es mir erlauben, in die Gruppe zu gehen und die Benutzer innerhalb der Gruppe zu betrachten. – yfan183

+0

Haben Sie den Code ausprobiert? Obwohl Sie nach einer Gruppe gefragt haben, haben Sie 'Where' verwendet, die möglicherweise viele zurückgeben könnte. Wenn es nur einen gibt, wird die Schleife nur einmal ausgeführt. Wenn Sie sicher sind, dass nur eine zurückgegeben wird, ändern Sie Ihre Abfrage und verwenden Sie "First" oder verwenden Sie "FirstOrDefault" – CodingYoshi

+0

hat IGroup haben und Eigenschaft, die ich die Benutzer in dieser Gruppe wie "Mitglieder" von @RasmusW unten genannten erhalten können . Weil der Code im Moment "Mitglieder = 0" zurückgibt, obwohl alle anderen Eigenschaften wie "displayName" und "objectId" korrekt angezeigt werden. – yfan183

0

Wenn Sie die Gruppen Objekt-ID haben, können Sie die direkte Mitglieder erhalten über diese URL in der Grafik-API:

https://graph.windows.net/myorganization/groups/{object_id}/$links/members?api-version

Das IGroup Ergebnis, das Sie in Ihrem Code erhalten (z. B. result.First()), enthält eine Members-Eigenschaft, mit der Sie die Member durchlaufen können.

können Sie eine IGroupFetcher verwenden Gruppenmitglieder abzurufen:

var group = await adClient.Groups.Where(g => g.ObjectId == groupObjectId).ExecuteSingleAsync(); 
IGroupFetcher groupfetcher = (Group)group; 
var membersResult = await groupfetcher.Members.ExecuteAsync(); 

var more = true; 
while (more) 
{ 
    foreach (var member in membersResult.CurrentPage) 
    { 
    //... remember to handle that members can be other groups 
    } 
    if (!membersResult.MorePagesAvailable) 
    { 
     more = false; 
    } 
    else 
    { 
     // get next page in results 
     membersResult = await membersResult.GetNextPageAsync(); 
    } 
} 
+0

Ich erhalte einen seltsamen Fehler, da die Elementeigenschaft 0 Mitglieder zurückgibt, die anderen Eigenschaften jedoch immer noch korrekt sind, wie objectId und displayName – yfan183

Verwandte Themen