如何通过EWS及Graph API获取Exchange共享任务列表权限与任务组
通过EWS和Graph API处理Exchange共享任务列表与任务组
一、使用EWS获取共享待办任务列表及任务组
1. 获取共享任务列表(ToDo Task List)
Exchange中,待办任务列表本质是TaskFolder类型的文件夹。要获取共享列表,需先绑定到任务根目录,再遍历子文件夹并检查权限集合:
// 初始化EWS服务(Office 365环境示例,推荐OAuth认证) ExchangeService ewsService = new ExchangeService(ExchangeVersion.Exchange2016); ewsService.Credentials = new OAuthCredentials("your-access-token"); ewsService.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"); // 绑定到当前用户的任务根文件夹 Folder taskRoot = Folder.Bind(ewsService, WellKnownFolderName.Tasks); // 遍历所有子任务文件夹(即任务列表) FindFoldersResults folderResults = taskRoot.FindFolders(new FolderView(100)); foreach (Folder folder in folderResults.Folders) { if (folder is TaskFolder targetTaskList) { Console.WriteLine($"任务列表名称: {targetTaskList.DisplayName}"); // 获取共享权限信息 PermissionSet sharePermissions = targetTaskList.PermissionSet; foreach (Permission perm in sharePermissions.Permissions) { Console.WriteLine($"共享对象: {perm.UserId.Name}, 权限级别: {perm.PermissionLevel}"); } } }
2. 获取任务组(Task Groups)
EWS提供FindTaskGroups方法直接获取所有任务组,以及组内关联的任务列表:
// 获取所有任务组 FindTaskGroupsResults taskGroupResults = ewsService.FindTaskGroups(); foreach (TaskGroup group in taskGroupResults) { Console.WriteLine($"任务组名称: {group.Name}"); // 遍历组内绑定的任务列表 foreach (FolderId listId in group.FolderIds) { TaskList boundList = TaskList.Bind(ewsService, listId); Console.WriteLine($" 关联任务列表: {boundList.DisplayName}"); } }
二、获取共享任务列表的权限:EWS与Graph API对比
EWS实现
如上述代码所示,通过TaskFolder.PermissionSet可直接读取该任务列表的所有共享权限,包含共享对象、权限级别(如ReadItems、EditOwnedItems、FullAccess等)。
Graph API实现
针对现代Office 365环境,更推荐使用Graph API,接口更简洁:
- 获取指定任务列表的共享权限:
返回结果会包含授权用户ID、权限类型(GET https://graph.microsoft.com/v1.0/me/tasks/lists/{task-list-id}/permissionGrantsread/write/fullAccess)等核心信息。 - 批量识别共享任务列表:调用
GET https://graph.microsoft.com/v1.0/me/tasks/lists,通过isShared字段筛选出共享列表。
三、使用Graph API获取任务组
Graph API中,Outlook任务组对应taskGroups资源,可直接查询:
GET https://graph.microsoft.com/v1.0/me/taskGroups
返回的响应会包含任务组名称、是否为默认组,以及关联的任务列表集合,示例片段:
{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('user-id')/taskGroups", "value": [ { "id": "AQMkADlmN...", "name": "团队协作任务组", "isDefaultGroup": false, "taskLists": [ { "id": "AAMkADlmN...", "name": "项目迭代任务", "isShared": true } ] } ] }
参考界面截图

内容的提问来源于stack exchange,提问作者Rafa Ayadi
相关产品推荐
相关产品推荐

