You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Graph API获取完整网站集管理员列表(包含用户和组)

解决方法

问题根因

你之前调用的https://graph.microsoft.com/beta/sites/{Site-id}接口本身仅返回站点所有者字段的单个用户,不会返回完整的网站集管理员列表,因此无法获取到多个用户和管理员组信息。同时isAdmin eq true的筛选条件仅能命中单独标记为网站集管理员的独立用户,无法覆盖加入所有者组的用户和组主体。

方案1:通过Microsoft Graph API获取

  • 调用站点权限接口:GET https://graph.microsoft.com/v1.0/sites/{site-id}/permissions
  • 筛选返回结果中roles字段包含owner的条目,即为全部网站集管理员主体,包含用户、安全组、Microsoft 365组等多种类型
  • 若需要展开组内的用户详情,对类型为group的主体额外调用GET https://graph.microsoft.com/v1.0/groups/{group-id}/members?$select=id,displayName,mail即可获取组内用户的完整信息

方案2:通过PnP JS获取(适配SPFX场景)

你可以直接通过PnP JS的内置接口拉取,无需自行封装Graph请求,参考代码如下:

import { spfi, SPFx } from "@pnp/sp";
import "@pnp/sp/webs";
import "@pnp/sp/site-groups";
import "@pnp/sp/users";

// 初始化PnP SP实例
const sp = spfi().using(SPFx(this.context));

// 1. 获取站点关联的所有者组(即网站集管理员组)
const ownerGroup = await sp.web.associatedOwnerGroup();

// 2. 拉取组内所有成员,包含用户和嵌套的安全组
const adminList = await sp.web.siteGroups.getById(ownerGroup.Id).users();

// 3. 可选:递归展开嵌套组内的用户
async function expandNestedGroups(memberList) {
  const result = [];
  for (const member of memberList) {
    if (member.PrincipalType === 4) { // PrincipalType=4代表是安全组
      const groupMembers = await sp.web.siteGroups.getById(member.Id).users();
      result.push(...await expandNestedGroups(groupMembers));
    } else {
      result.push(member);
    }
  }
  return result;
}

// 展开后的完整管理员用户列表
const fullAdminList = await expandNestedGroups(adminList);

补充说明

你需要同时合并两部分内容避免遗漏:

  1. 所有者组内的所有用户、组主体
  2. 通过isAdmin eq true筛选出的单独配置的网站集管理员用户

接口调用需要当前登录用户拥有至少站点读取权限,否则无法正常拉取权限和用户组信息。


内容的提问来源于stack exchange,提问作者Rakesh Ranjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:09:03