如何获取Microsoft Teams团队关联的SharePoint网站集及权限信息?
1. 精准获取团队专属的SharePoint站点
你之前调用Groups[group.Id].Sites.GetAsync()返回多个站点,是因为Office 365组可能关联多个服务的站点(比如Planner、Forms),但Teams对应的是团队主站点,用以下两种方式直接获取:
方式一:通过Group节点获取根站点
var teamSite = await graphClient.Groups[group.Id].Sites["root"].GetAsync();
这个根站点就是Teams团队默认绑定的SharePoint站点,团队的所有文件都存在这个站点的文档库中。
方式二:通过Team节点直接关联
如果已经拿到Team对象,也可以直接从Team获取站点:
var teamSite = await graphClient.Teams[team.Id].Sites["root"].GetAsync();
两种方式效果完全一致,选哪种都可以。
2. 遍历文件夹结构与文件列表
Teams的文件默认存在站点的"Shared Documents"文档库(显示名称通常是"Documents"),可以通过两种方式访问:
方式一:通过Site的List访问
// 获取站点的默认文档库 var documentLibrary = await graphClient.Sites[teamSite.Id].Lists["Shared Documents"].GetAsync(); // 获取库的根文件夹 var rootFolder = await graphClient.Sites[teamSite.Id].Lists[documentLibrary.Id].RootFolder.GetAsync(); // 获取根文件夹下的所有子文件夹和文件 var folderChildren = await graphClient.Sites[teamSite.Id].Drives[documentLibrary.DriveId].Root.Children.GetAsync();
方式二:直接通过Group的Drive访问
Office 365组的Drive就是对应Teams的文件库,更直接:
var teamDrive = await graphClient.Groups[group.Id].Drive.GetAsync(); // 获取根目录下的所有内容 var driveItems = await graphClient.Drives[teamDrive.Id].Root.Children.GetAsync();
3. 检查成员与文件/文件夹权限
团队基础权限(组角色)
Teams的成员权限对应Office 365组的角色(所有者/成员/访客),直接获取组的成员和所有者即可:
// 获取所有成员 var groupMembers = await graphClient.Groups[group.Id].Members.GetAsync(); // 获取所有所有者 var groupOwners = await graphClient.Groups[group.Id].Owners.GetAsync();
站点级细粒度权限
如果需要查看SharePoint站点的具体权限分配(比如自定义权限组):
var sitePermissions = await graphClient.Sites[teamSite.Id].Permissions.GetAsync(); foreach (var permission in sitePermissions.Value) { // 权限对应的用户/组 var grantedIdentities = permission.GrantedToIdentities; // 权限级别(如Full Control、Edit、Read等) var roles = permission.Roles; }
文件/文件夹的单独权限
针对某个特定的文件夹或文件,获取其专属权限:
// 替换为目标文件/文件夹的DriveItem ID var targetItemId = "xxxxxx"; var itemPermissions = await graphClient.Drives[teamDrive.Id].Items[targetItemId].Permissions.GetAsync(); foreach (var permission in itemPermissions.Value) { var grantedTo = permission.GrantedToIdentities; var roles = permission.Roles; }
内容的提问来源于stack exchange,提问作者Martin H.
相关产品推荐
相关产品推荐

