0

私は「住人の募集」というグループを持っています。そのグループでは、私はすべてのアパートの2つのグループがあります。AzureグラフAPIは、子グループのユーザーを一覧表示します

- Apt1a_Renters 
- Apt1a_Owners 

- Apt2a_Renters 
- Apt2a_Owners 

などなど...

A人がApt2a_OwnersグループにもApt1a_Rentersグループにすることができます。

"Building Residents"グループのすべてのメンバーにユーザーの質問をしたいが、そうしたら、そのグループの中のグループを返すだけだ。

単一のクエリを使用して、重複を返さずにすべての建物住民をリストする方法はありますか(apt2a_ownersとapt1a_rentersの同じ人物)ですか?

+0

あなたの質問を指定していただけますか?あなたは何を試しましたか? Azure Graph REST API、またはラッパーを使用していますか? –

+0

@JanKruse私の質問は、私の最後の文です(疑問符で終わります)。私は "Building Residents"グループのメンバーに問い合わせることを試みました(その前の文で指定されています)。 Azure Graph APIについて(タイトルで指定されているように)私は話しています。 – Progger

+0

REST経由でAPIにクエリを実行するか、C#ライブラリのようなラッパーを使用しますか?あなたが説明しようとしているデータの構造を理解していません。それはAADグループ、Office 365グループ、セキュリティグループについてですか?私は正しく理解していますか?グループのメンバーであるすべてのAADユーザーオブジェクトが必要ですか?サンプルデータ、既に試したクエリ、対応するAPIレスポンスを提供できますか? –

答えて

2

Azure Graph RESTは、1つのグループから直接メンバーを取得できます。メンバーのユーザーを再帰的に取得するには、それを自分で実装する必要があります。ここにあなたの参考のためのAzure ADグラフライブラリを使ってC#でのコードサンプルの配線である:

public void testGetMembersRecursively() 
{ 
    var accessToken=""; 
    var tenantId=""; 
    var groupName=""; 
    var client = GraphHelper.CreateGraphClient(accessToken,tenantId); 
    var group = (Group)client.Groups.ExecuteAsync().Result.CurrentPage.First(g => g.DisplayName ==groupName); 
    var groupFetcher = client.Groups.GetByObjectId(group.ObjectId); 
    List<string> users = new List<string>(); 
    GetMembersRecursively(groupFetcher, users); 
    Console.WriteLine(String.Join("\n", users.Distinct<string>().ToArray())); 
} 

public void GetMembersRecursively(Microsoft.Azure.ActiveDirectory.GraphClient.IGroupFetcher groupFetcher, List<string> users) 
{ 
    var membersResoult = groupFetcher.Members.ExecuteAsync().Result; 
    AddMember(membersResoult, users); 

    while (membersResoult.MorePagesAvailable) 
    { 
     membersResoult = membersResoult.GetNextPageAsync().Result; 
     AddMember(membersResoult, users); 
    } 
} 

public void AddMember(IPagedCollection<IDirectoryObject> membersResoult, List<string> users) 
{ 
    var members = membersResoult.CurrentPage; 

    foreach (var obj in members) 
    { 
     var _user = obj as Microsoft.Azure.ActiveDirectory.GraphClient.User; 
     if (_user != null) 
      users.Add(_user.DisplayName); 
     else 
     { 
      var groupMember = obj as Microsoft.Azure.ActiveDirectory.GraphClient.Group; 
      if (groupMember != null) 
      { 
       GetMembersRecursively(GetGroupById(groupMember.ObjectId), users); 
      } 
     } 
    } 
} 

GraphHelperクラス:

class GraphHelper 
{ 
    public static ActiveDirectoryClient CreateGraphClient(string accessToken, string tenantId) 
    { 
     string graphResourceId = "https://graph.windows.net"; 

     Uri servicePointUri = new Uri(graphResourceId); 
     Uri serviceRoot = new Uri(servicePointUri, tenantId); 

     ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async() => await Task.FromResult(accessToken)); 

     return activeDirectoryClient; 
    }  
} 
関連する問題