如何解决多个电子表格的批量更新授权
当我授权它们时(一个接一个,在创建时,经过大约一年的交叉) - https://www.googleapis.com/auth/script.container.ui
授权丢失了,因为它不需要。
现在需要它,用于新功能。
有没有一种方法可以批量更新所有电子表格的授权,而不必逐个删除访问权限并重新允许?
电子表格有界脚本:
function mainFunction(e) { // with installable onEdit trigger
myFunctionA(e);
myFunctionB(e);
}
function myFunctionA(e) {
myLibrary.myFunctionA(e);
}
...
库脚本:
function myFunctionA(e) {
var htmlOutput = HtmlService
.createHtmlOutput('<p>some text</p>')
.setWidth(250)
.setHeight(200);
SpreadsheetApp.getUi().showModelessDialog(htmlOutput,'some title');
}
...
解决方法
TL;DR
您可以使用 Drive API 的权限资源来获取、更新、撤销和/或添加权限。
答案
可以使用 Drive v3 API 的权限资源 (see its documentation) 以编程方式更新文件权限。这允许您控制所有权限。我会尝试不做任何更改地调用 update
,如果它不起作用,则使用 delete
和 create
撤销并重新分配具有完全相同参数的权限。为此,您可以使用任何您喜欢的客户端库(official libraries,还有很多非官方的)。
您也可以使用 Google Apps 脚本来执行此操作。它不支持开箱即用,但您可以使用高级服务 (see Drive service documentation)。请注意,您需要将它们添加到项目中。此外,它还使用 Drive v2 API (see v2 permissions resource documentation),因此可能会发生一些变化。
还值得注意的是,您可能有数百个请求要处理,尤其是在一次性处理完所有文件的情况下。为了加快速度,我建议使用批量请求 (see Drive v3 performance guide here)。在 Apps Script 中这样做很痛苦,因为您必须手动发出 HTTP 请求。我建议使用本地应用程序,您可以在其中轻松使用库,并且在它被杀死之前没有最长时间。
可能的算法大纲
如果不改变任何参数的简单更新不起作用,我使用的算法将类似于:
- 获取所有需要更新的文件并保存其 ID。
- 对于每个文件,获取权限列表。如果有多个页面,请确保获取所有页面。确保您有此列表的备份。如果出现任何问题,您可能必须以编程方式恢复正确值的唯一方法。
- 准备要撤销和重新授予的权限列表。
- 获取权限列表的副本。
- 删除所有没有类型
writer
、commenter
或reader
的权限。 - 将
id
保存在列表中(待撤销)。 - 将可写字段保存在要授予的列表中。
- 撤销权限并重新授予权限。
分步制作的想法是能够编写 5 个小脚本而不是 1 个大脚本,从而减少出错的可能性。它还允许您进行备份,这非常重要。
我会同时对所有文件执行步骤 1-3,因此在开始进行更改之前,您需要准备好所有必要的数据。在第 4 步,我会通过许可撤销并重新授予他们许可。
参考文献
- Drive v3 API’s Permissions resource (Google Developers)
- Google API Client Libraries (Google Developers)
- Drive Service | Google Apps Script (Google Developers)
PD:您提出这个问题是一种解决方法,但我想留下答案以供将来参考。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。