MS Graph API C#将用户添加到组

时间:2017-05-22 14:17:38

标签: c# api azure microsoft-graph

我一直在调查如何使用Microsoft Graph API(nuget上可用的dotnet / C#库)从Azure AD组添加(以及稍后删除)用户。

Nuget MS Graph API

忽略连接GraphServiceClient等所有其他内容。我正在尝试与下面的示例非常相似的代码,没有任何异常(建议一切正常)但是当我再次通过API获取组时,它还没有任何成员!

Quickwatch of returned group object after modification attempt

有趣的是(作为旁白),当我在memberOf对象上请求user属性并告诉它扩展它时,它仍会返回null。

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 => "test.user@mytenant.com"
// 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);
}

我已根据答案添加了上面的代码段,因为我认为它简洁地回答了有关添加成员的问题。

感谢Nan Yu的回答。

1 个答案:

答案 0 :(得分:6)

要将用户添加到群组,您可以使用:

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["testnanyu@testbasic1.onmicrosoft.com"].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
                        });
                    }

                }
            }