如何通过MS Graph API获取Teams班级的Members组GUID?
解决Teams班级Class Materials驱动器中按学生单独设置文件夹权限的问题
核心场景与问题
使用Teams「Class」模板创建的班级团队,默认包含:
- Owners组(教师,拥有Class Materials驱动器读写权限)
- Members组(学生,拥有Class Materials驱动器只读权限)
- Visitors组(未启用)
需求是在Class Materials驱动器中创建单个学生专属可见的作业文件夹:先建通用父文件夹assignments,再为每个学生创建子文件夹,移除子文件夹的Members组权限后单独添加对应学生权限。但直接移除子文件夹的Members权限会同步影响父文件夹,需通过Graph API实现全自动化权限配置,核心难点是获取Members组的GUID(从文件夹权限接口返回的是短ID,而非完整GUID)。
解决方案步骤
1. 获取班级团队的Azure AD Group ID
首先定位目标班级对应的Azure AD组,调用Graph API:
GET https://graph.microsoft.com/v1.0/groups?$filter=displayName eq '你的班级团队名称'&$select=id,displayName
从返回结果中提取班级的id(即Group ID)。
2. 获取班级Members组(学生组)的完整GUID
Teams Class模板会自动生成命名格式为grp-<班级名称> Members的学生组,通过以下API筛选获取其GUID:
GET https://graph.microsoft.com/v1.0/groups?$filter=displayName eq 'grp-你的班级名称 Members'&$select=id
返回结果中的id即为所需的Members组完整GUID。
3. 创建通用父文件夹assignments
在Class Materials驱动器中创建父文件夹,调用API:
POST https://graph.microsoft.com/v1.0/drives/{driveId}/items/root/children
请求体:
{ "name": "assignments", "folder": {}, "@microsoft.graph.conflictBehavior": "rename" }
保存返回结果中的id(即父文件夹ID)。
4. 创建学生专属子文件夹并打破权限继承
为每个学生创建子文件夹后,必须先打破权限继承(避免修改子文件夹权限影响父文件夹):
4.1 创建子文件夹
POST https://graph.microsoft.com/v1.0/drives/{driveId}/items/{assignmentsFolderId}/children
请求体:
{ "name": "学生姓名/ID专属文件夹", "folder": {}, "@microsoft.graph.conflictBehavior": "rename" }
保存子文件夹的id。
4.2 打破权限继承
调用API复制父文件夹现有权限并切断继承:
POST https://graph.microsoft.com/v1.0/drives/{driveId}/items/{studentFolderId}/breakInheritance
请求体:
{ "copyExistingPermissions": true }
5. 移除子文件夹的Members组权限并添加学生单独权限
5.1 获取子文件夹中Members组的权限ID
调用API筛选出对应Members组的权限项:
GET https://graph.microsoft.com/v1.0/drives/{driveId}/items/{studentFolderId}/permissions?$filter=grantedToV2/siteGroup/id eq '{membersGroupGUID}'
从返回结果中提取权限项的id(即permissionId)。
5.2 删除Members组权限
DELETE https://graph.microsoft.com/v1.0/drives/{driveId}/items/{studentFolderId}/permissions/{permissionId}
5.3 添加单个学生的访问权限
POST https://graph.microsoft.com/v1.0/drives/{driveId}/items/{studentFolderId}/invite
请求体(替换为目标学生的用户GUID):
{ "recipients": [ { "user": { "id": "学生用户GUID" } } ], "message": "这是你的专属作业文件夹", "requireSignIn": true, "sendInvitation": false, "roles": ["read"] }
关键说明
- 必须先执行打破权限继承操作,否则修改子文件夹的继承权限会同步影响父文件夹,这是解决权限同步问题的核心。
- 通过筛选组名称获取Members组GUID,可完全适配自动化脚本流程,无需依赖网页端手动操作。
内容的提问来源于stack exchange,提问作者Holly
相关产品推荐
相关产品推荐

