2017-05-22 48 views
0

我一直在研究如何使用Microsoft Graph API(nuget上可用的dotnet/C#庫)從Azure AD組添加(以及稍後刪除)用戶。MS Graph API C#將用戶添加到組

Nuget MS Graph API

無視一切圍繞得到一個連接GraphServiceClient等我想代碼非常相似,下面的示例,沒有得到任何異常(表明一切都很好),但是當我拿到小組再次通過API,它還沒有任何成員!

Quickwatch of returned group object after modification attempt

有趣的(順便說一句),當我問memberOf財產user對象上,並告訴它展開它,它回來了空仍。

var user = await client.Users[userPrincipalName] 
      .Request() 
       .Select("id,memberOf") 
       .Expand("memberOf") 
        .GetAsync(); 

var group = await client.Groups[groupId] 
       .Request() 
       .Select("members") 
        .Expand("members") 
        .GetAsync(); 

group.Members.Add(user); 

await client.Groups[groupId].Request().UpdateAsync(group); 

// userPrincipalName => "[email protected]" 
// groupId => the object GUID for the group 

有沒有人知道我在做什麼錯在這裏?我曾經想出這個代碼的文檔都是基於鏈接到以下文件:

API doc for 'group'

Adding a member to a group

而且,我試圖風格的辦法對解決方案建議在這裏設置許可證用戶:

Assign user license via Graph API

像往常一樣,感謝您的幫助。

彼得

附加

我也試着戳周圍的圖形API中尋找潛在的更新.Members屬性/資源,而不是組本身:

await client.Groups[groupId].Members.Request(). // <-- Only has GetAsync() 

但它只有GetAync()方法可用。

更新基於答案

var usersGroups = await client.Users[userPrincipalName].MemberOf.Request().GetAsync(); 

if (!usersGroups.Any(g => g is Group && g.Id == groupId)) 
{ 
    // User is not a member of the group, add them. 
    var user = await client.Users[userPrincipalName].Request().Select("id").GetAsync(); 
    await client.Groups[groupId].Members.References.Request().AddAsync(user); 
} 

我基於答案添加上面的代碼段,因爲我認爲它簡潔地回答關於增加成員問題。

感謝南禹的回答。

回答

2

要添加用戶組,您可以使用:

User userToAdd = await graphClient.Users["objectID"].Request().GetAsync(); 
await graphClient.Groups["groupObjectID"].Members.References.Request().AddAsync(userToAdd); 

爲了得到一組的成員:

 List<ResultsItem> items = new List<ResultsItem>(); 

     // Get group members. 
     IGroupMembersCollectionWithReferencesPage members = await graphClient.Groups[id].Members.Request().GetAsync(); 

     if (members?.Count > 0) 
     { 
      foreach (User user in members) 
      { 
       // Get member properties. 
       items.Add(new ResultsItem 
       { 
        Properties = new Dictionary<string, object> 
        { 
         { Resource.Prop_Upn, user.UserPrincipalName }, 
         { Resource.Prop_Id, user.Id } 
        } 
       }); 
      } 
     } 

獲取組當前用戶的直接會員,您可以嘗試:

IUserMemberOfCollectionWithReferencesPage memberOfGroups = await graphClient.Users["[email protected]"].MemberOf.Request().GetAsync(); 

      if (memberOfGroups?.Count > 0) 
      { 
       foreach (var directoryObject in memberOfGroups) 
       { 

        // We only want groups, so ignore DirectoryRole objects. 
        if (directoryObject is Group) 
        { 
         Group group = directoryObject as Group; 
         items.Add(new ResultsItem 
         { 
          Display = group.DisplayName, 
          Id = group.Id 
         }); 
        } 

       } 
      } 
+0

我從來沒有見過這個「GroupService」,但其他的東西似乎有意義/工作! :) – peteski

+0

對不起,我以爲你使用的是https://github.com/microsoftgraph/aspnet-snippets-sample。在該代碼示例中,有一個GroupService類。如果你沒有使用該代碼示例。你可以使用IGroupMembersCollectionWithReferencesPage成員=等待graphClient.Groups [id] .Members.Request()。GetAsync();獲得小組成員。請檢查編輯答案。 –

+0

對不起,代碼示例如下:https://github.com/microsoftgraph/aspnet-snippets-sample –

相關問題