首页 > 解决方案 > 使用 AppScript 的域超级管理员收到错误:对 drive.teamdrives.insert 的 API 调用失败并出现错误:此文件的权限不足

问题描述

我正在开发一个需要创建新 Google TeamDrives 的 Google App Script。我是我所在域的超级管理员,当我尝试执行代码(按照 App Script 代码完成的建议编写)时,出现错误:

对 drive.teamdrives.insert 的 API 调用失败并出现错误:此文件的权限不足(第 288 行,文件“代码”)

我一直难以找到严格处理 App Script 的文档,因此我正在尝试调整此处找到的 API 方法:https ://developers.google.com/drive/api/v3/reference/drives/create

显然,我使用 App Script API 代替直接的 http 调用,如下面的代码所示。另外,我注意到 API v3 使用 create 方法,而不是 v2 中使用的 insert。应用脚本似乎仍在使用插入方法。将 insert 替换为 create 会导致错误消息指示底层 API 版本为 2:

类型错误:在对象 AdvancedServiceIdentifier{name=drive, version=v2} 中找不到函数创建。

v2 中的插入方法与 v3 中的创建方法非常相似: https ://developers.google.com/drive/api/v2/reference/drives/insert

我在尝试检索现有驱动器上的权限时遇到了类似的错误,解决方案是在请求中传递“supportsAllDrives=true”参数(使用 API 调用的可选参数参数)。不幸的是,“插入”方法没有我可以用来传递可选参数的参数——资源表示和请求 ID 是“插入”方法的唯一参数。

我的代码:

function createSharedDrive() {
  var resource = {
    name: "TestDriveChrisD6"
  };
  var drive = Drive.Teamdrives.insert(resource, "testRequestId_TestDriveChrisD6");
  Logger.log(JSON.stringify(drive)); // to see the result if it works eventually
}

我希望这个 API 调用会导致包含驱动器表示的响应,而不是我收到错误消息:

对 drive.teamdrives.insert 的 API 调用失败并出现错误:此文件的权限不足(第 288 行,文件“代码”)

错误消息中的行号只是我包含代码的源代码行号:

var drive = Drive.Teamdrives.insert(resource, "testRequestId_TestDriveChrisD6");

我究竟做错了什么?我应该通过直接请求调用 http 方法吗?

标签: google-apps-scriptgoogle-drive-apigoogle-drive-shared-drive

解决方案


我的问题已解决如下:

  1. 转到管理控制台 -> 应用程序 -> G Suite -> 云端硬盘和文档 -> 共享设置
  2. 在我的域中的“共享驱动器创建”部分中,设置“阻止 <域名> 中的用户创建新的共享驱动器”在全局域设置中为 ON,对于管理员组织单位为 OFF(覆盖)。原来我的用户在管理员组中,但不在管理员组织单元中。将我的用户移动到管理员 OU 解决了这个问题。

推荐阅读