Microsoft Graph for Office 365 - 用例:通过Office 365组授予权限

博客地址:http://blog.csdn.net/FoxDave

本篇我们介绍通过将用户添加到Office 365组来向用户授予权限的操作,文中所指的组为Office 365组,不包括安全组。
Microsoft Graph for Office 365 - 用例:通过Office 365组授予权限_第1张图片

向组中添加用户并验证权限

准备一个新用户或现有的某个用户,确保已向他分配了license,现在我们就可以将它添加到所需权限的各种组中。我们将演示如何将用户添加到Office 365组。 作为这些组的一份子,用户不仅会获得访问组的权限,还有与组关联的SharePoint Online网站的权限。然而,我们还可以更新Azure AD应用程序,指派访问SharePoint Online的权限,进而访问SharePoint Online REST API去完成指派权限的任务,这不是本篇的重点,点到为止。

我们可以使用Microsoft Graph的/users/{id|userPrincipalName}/memberOf终结点去获取用户所属的组和目录的角色。相关的文档链接戳这里。

我们可以使用Microsoft Graph的/groups/{id/members/$ref终结点去将用户添加到组。相关的文档戳这里。

要使用上面提到的API,我们需要为Azure AD应用程序授予新的权限:User.Read.All、Group.ReadWrite.All、Directory.Read.All和Directory.ReadWrite.All。授权并用管理员账号批准,如下图。
Microsoft Graph for Office 365 - 用例:通过Office 365组授予权限_第2张图片
注意:由于作者一直在使用同一个应用程序去做演示,所以目前累计添加了如上图的权限。在实际的场景中,应该尽可能地给予最小权限。

接下来就弄代码了。

获取用户所在的组列表

在项目的Helpers中添加新类PermissionHelper.cs,用来实现获取用户所属组的列表、通过前缀查找组、向组中添加用户、创建一个组等方法。获取用户所属组的列表的核心代码如下:

 public async Task> UserMemberOf(string alias)
        {
            User user = FindByAlias(alias).Result;
            List items = new List();

            IUserMemberOfCollectionWithReferencesPage groupsCollection = await _graphClient.Users[user.Id].MemberOf.Request().GetAsync();
            if (groupsCollection?.Count > 0)
            {
                foreach (DirectoryObject dirObject in groupsCollection)
                {
                    if (dirObject is Group)
                    {
                        Group group = dirObject as Group;
                        items.Add(new ResultsItem
                        {
                            Display = group.DisplayName,
                            Id = group.Id
                        });
                    }
                }
            }
            return items;
        }

对于创建组的操作,如果我们的租户中设置了创建组需要的前缀,那么需要按照规则创建,否则会出错。设置组创建时前缀后缀的策略位置如下图:
Microsoft Graph for Office 365 - 用例:通过Office 365组授予权限_第3张图片

查找组并向组和关联的SP Online网站中添加用户权限

下面的代码展示了向组中添加一个用户,并在此之前检测用户是否已经存在于组中。

//Adds the user to the given group if not already a member of
        public async Task AddUserToGroup(string alias, string groupId)
        {
            User user = FindByAlias(alias).Result;
            List items = UserMemberOf(alias).Result;
            if (items.FindIndex(f => f.Id == groupId) >= 0)
                Console.WriteLine("User already belongs to this group");
            else
                await _graphClient.Groups[groupId].Members.References.Request().AddAsync(user);
        }

        public async Task GetGroupByName(string groupNamePrefix)
        {
            var groups = await _graphClient.Groups.Request().Filter("groupTypes/any(c:c%20eq%20'unified') AND startswith(displayName,'" + groupNamePrefix + "')").Select("displayName,description,id").GetAsync();
            if (groups?.Count > 0)
            {
                return (groups[0] as Group).Id as string;
            }
            return null;
        }

帮助类的代码完成了,接下来就是在Program.cs文件中添加代码进行测试了,添加如下代码:

private static void PermissionHelperExampleScenario()
        {
            const string alias = "foxdave";
            ListUnifiedGroupsForUser(alias);
            string groupId = GetUnifiedGroupStartswith("bra");
            AddUserToUnifiedGroup(alias, groupId);
            ListUnifiedGroupsForUser(alias);
        }

        private static void ListUnifiedGroupsForUser(string alias)
        {
            var permissionHelper = new PermissionHelper(_graphServiceClient);
            List items = permissionHelper.UserMemberOf(alias).Result;
            Console.WriteLine("User is member of " + items.Count + " group(s).");
            foreach (ResultsItem item in items)
            {
                Console.WriteLine("  Group Name: " + item.Display);
            }
        }

        private static string GetUnifiedGroupStartswith(string groupPrefix)
        {
            var permissionHelper = new PermissionHelper(_graphServiceClient);
            var groupId = permissionHelper.GetGroupByName(groupPrefix).Result;
            return groupId;
        }

        private static void AddUserToUnifiedGroup(string alias, string groupId)
        {
            var permissionHelper = new PermissionHelper(_graphServiceClient);
            permissionHelper.AddUserToGroup(alias, groupId).GetAwaiter().GetResult();
        }

方法ListUnifiedGroupsForUser用来查找给定用户所属的所有组。
方法GetUnifiedGroupStartswith通过给定组名的前缀去查找组并返回组id。
方法AddUserToUnifiedGroup用于将给定用户添加到组。

接下来在Main方法中添加调用方法语句即可。

PermissionHelperExampleScenario();

编译并运行查看结果。
Microsoft Graph for Office 365 - 用例:通过Office 365组授予权限_第4张图片
示例代码已更新,戳这里。
在这里插入图片描述

你可能感兴趣的:(Microsoft,365,Microsoft,Graph,Microsoft,Graph,30天训练营中文版)