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

如何使用Google Drive API及PHP移除团队盘用户

核心问题原因

你API调用失败是两个必踩的坑,来自网页端和API的逻辑差异:

  • 你现在给新增用户设的是fileOrganizer角色,这个角色没有团队盘最高管理权限。API规则要求,移除团队盘最后一个organizer(你创建盘时默认就是这个角色)之前,盘内必须至少存在1名其他organizer角色成员,否则直接返回403拒绝操作。网页端操作时会自动帮你做提权校验,API不会做这个自动处理。
  • 移除权限不需要传邮箱,你要么提前拿到自己账号在盘内的permissionId,要么直接用API预留的特殊值me代表当前授权账号,很多人卡在这里是因为试图传邮箱当permissionId调用删除接口。
实现代码

直接在你现有添加用户的逻辑后面追加就行,注意先确保至少加1个organizer角色的用户:

$service = $client->ServiceDrive();
$drive_id = $teamDrive->getId();

// 第一步:先添加1名organizer角色的管理员,这步是删自己的前提
$adminBody = new Google_Service_Drive_Permission();
$adminBody->setKind('drive#permission');
$adminBody->setEmailAddress($data["admin_email"]); // 替换成你要保留的管理员邮箱
$adminBody->setType("user");
$adminBody->setRole("organizer");
$createOpt = [
    'supportsAllDrives' => true, // 新版客户端用这个参数兼容所有盘类型,旧版换回supportsTeamDrives => true即可
    'fields' => 'id'
];
$service->permissions->create($drive_id, $adminBody, $createOpt);

// 如果你还要加普通权限用户,这时候正常加就行,角色设成fileOrganizer/writer都可以
// 普通用户添加逻辑和你之前写的一致

// 第二步:移除自身权限
$deleteOpt = [
    'supportsAllDrives' => true
];
try {
    // permissionId传"me"就代表当前发起请求的授权账号,不用额外查权限列表
    $service->permissions->delete($drive_id, "me", $deleteOpt);
    // 执行到这里就已经移除成功了
} catch (Google_Service_Exception $e) {
    // 常见报错排查:403=盘内无其他organizer/账号无权限,404=盘ID错误,400=参数缺失
    var_dump($e->getMessage());
}
补充说明
  • 如果你不需要保留其他organizer,等你把自己移除后,可以再调用permissions->update接口把之前加的管理员角色改成更低的fileOrganizer/writer/reader,只要删自己的那个时间点盘里有至少1个organizer就行。
  • 不要尝试在创建团队盘的接口里直接取消自己的权限,创建动作必须由发起者持有organizer权限才能完成,必须走「创建盘→加其他管理员→删自己」的流程,和网页端操作逻辑完全一致。
  • 如果你是用Workspace全域管理员账号授权操作,可以在删除参数里加上'useDomainAdminAccess' => true,可以跨权限管理域内所有团队盘,普通用户账号不需要加这个参数。

内容的提问来源于stack exchange,提问作者Kelison Bessa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:09:23