google-apps-script - 使用 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 方法吗?
解决方案
我的问题已解决如下:
- 转到管理控制台 -> 应用程序 -> G Suite -> 云端硬盘和文档 -> 共享设置
- 在我的域中的“共享驱动器创建”部分中,设置“阻止 <域名> 中的用户创建新的共享驱动器”在全局域设置中为 ON,对于管理员组织单位为 OFF(覆盖)。原来我的用户在管理员组中,但不在管理员组织单元中。将我的用户移动到管理员 OU 解决了这个问题。
推荐阅读
- java - 如何在不使用 Maven 配置文件的情况下关闭 Spring Boot 应用程序的 Swagger/OpenAPI 3.0?
- java - 如何保存我的绘图?(基本绘画应用程序)
- php - 为什么我从作为参数传递的数组中得到“注意:未定义的偏移量”?
- git - 在 Github 上对同一项目的多个存储库进行分组的方式?
- python - 这个 python 发布请求安全吗?
- laravel - Laravel Eloquent 将 "where" 和 "orWhereHas" 一起使用
- macos - Mac 守护进程无法运行 bash 脚本
- javascript - 一次定义多个函数
- elasticsearch - 您可以在elasticsearch中查询父子连接中多个子节点之间的元素吗?
- sql - 根据另一列的计数选择一列的最佳方法