【问题标题】:MS Graph API C# Add user to groupMS Graph API C#将用户添加到组
【发布时间】:2017-05-22 14:17:38
【问题描述】:

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

Nuget MS Graph API

忽略连接GraphServiceClient 等的所有其他内容。我正在尝试与下面的示例非常相似的代码,没有出现任何异常(表明一切都很好)但是当我再次通过 API 获得该组时,它是还没有会员!

有趣的是(顺便说一句),当我在 user 对象上请求 memberOf 属性并告诉它扩展它时,它仍然返回 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);
}

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

感谢南宇的解答。

【问题讨论】:

    标签: c# api azure microsoft-graph-api


    【解决方案1】:

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

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

    【讨论】:

    • 我以前从未见过这个“GroupService”,但其他东西似乎很有意义/有效! :)
    • 对不起,我以为你在使用github.com/microsoftgraph/aspnet-snippets-sample。在该代码示例中,有一个 GroupService 类。如果您没有使用该代码示例。你可以使用 IGroupMembersCollectionWithReferencesPage members = await graphClient.Groups[id].Members.Request().GetAsync();获取组成员。请检查编辑后的答案。
    • 对不起,代码示例在这里:github.com/microsoftgraph/aspnet-snippets-sample
    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多