2017-02-01 3 views
0

мне удалось получить группу, я хочу от AAD, используяMVC5 как перебирать лазурной активной группы пользователей каталога

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

Но я не знаю, как перебирать группы меня и добавьте всех пользователей из этой группы в список.

+0

Что вы имеете в виду? каков тип результата? Разве это не какая-то коллекция? – CodingYoshi

+0

Я бы создал пользовательский класс, который представляет результаты, возвращаемые из ActiveDirectoryClient, а затем сопоставляет их с набором результатов, например. Список users = ожидание activeDirectoryClient.Groups.Where (u => u.DisplayName.Equals ("myGroupName")). ExecuteAsync(); Затем перейдите по списку. foreach (результат пользователя для пользователей) {// здесь что-то делать} – Waragi

+0

@Waragi, который не работает, потому что результат возвращает тип IGroup, и это просто группа, поэтому вы не можете сопоставить ее с типом пользователя – yfan183

ответ

0

ли это:

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

EDIT

делает IGroup есть и свойство, которое позволяет мне получить пользователи в этой группе, как члены

Да он делает но вам нужно будет явно попросить его расширить. Вот как получить все пользователи в группе:

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

, как это будет работать? в группах будет только 1 элемент, для которого я запросил группу. И нет никаких атрибутов для IGroup, которые позволяют мне войти в группу и посмотреть на пользователей внутри группы. – yfan183

+0

Пробовал ли вы код? Хотя вы запрашивали для одной группы, вы использовали 'Where', который мог бы вернуть много. Если есть только один, цикл будет запускаться только один раз. Если вы уверены, что он должен возвращать только один, измените свой запрос и используйте 'First' или используйте' FirstOrDefault' – CodingYoshi

+0

. У IGroup есть и свойство, которое позволяет мне получать пользователей в этой группе, таких как 'members', упомянутые @RasmusW ниже , Потому что прямо сейчас код возвращает 'Members = 0', несмотря на то, что все остальные свойства отображаются правильно, такие как' displayName' и 'objectId' – yfan183

0

Если у вас есть группы идентификатор объекта, вы можете получить прямые участники, использующие этот URL в графе API:

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

Результат IGroup вы получаете в своем коде (например, с использованием result.First()), содержит свойство Members, которое вы можете использовать для прокрутки элементов.

Вы можете использовать IGroupFetcher для извлечения членов группы:

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

Я получаю странную ошибку, так как свойство member возвращает 0 членов, однако другие свойства все еще верны, такие как objectId и displayName – yfan183

Смежные вопросы