如何转移谷歌电子表格的所有权并成为一名查看者



是否可以将所有者权限移交给其他用户,并使用应用程序脚本将前所有者更改为查看器?

将所有者权限传输给另一个用户并作为查看器

我正在尝试制作一个脚本,将所有者交给另一个用户,并将前所有者更改为查看器,或者禁止前所有者编辑谷歌电子表格。问题是脚本由前所有者运行,并且脚本无法删除前所有者的编辑权限。

我尝试过的

我尝试了setViewer()、sheet.protect()和contentRestictions.readOnly,但它们都不是一个可行的解决方案

  1. removeEditors()setViewer()

setViewer()方法对编辑器无效,并且在将removeEditor()应用于前所有者之后(当然是在更改所有者之后),脚本无法执行setViewer(),因为它不再具有权限。

  1. sheet.protect()

该方法允许所有者和运行脚本的用户编辑受保护的范围。不符合资格。

  1. contentRestrictions.readOnly

编辑器可以解除限制。不可行。

  • 内容限制代码:

    函数setReadOnly(){var ss=SpreadsheetApp.getActive();var supervisor='xxxxxxxx@gmail.com';file=DriveApp.getFileById(ss.getId());尝试{驾驶文件更新({"writersCanShare":false,"copyRequiresWriterPermission":true,"contentRestrictions":[{"readOnly":true}]},ss.getId());file.setShareing(DriveApp.Access.ANYONE_WITH_LINK,DriveApp.Permission.NONE);file.setOwner(supervisor);}捕获(e){console.log(e);}}

我最近发现contentRestrictions.readOnly已经实现到Google Drive API。虽然我认为这将是限制编辑修改文件内容的好方法,但我意识到作为编辑的用户可以";解锁";即使文件已被所有者锁定,也会单击该文件。

如果编辑器可以解决限制,我不理解这个属性的用途。文档中的解释说,我们可以使用此字段来防止修改标题、上传新修订和添加评论。但是,编辑器可以很容易地解锁文件,而且查看器无论如何都无法修改文件。

我相信你的现状和目标如下。

  • 你有一个谷歌电子表格和一个脚本。你是它们的主人。
    • 从您的脚本中,该脚本是电子表格的容器绑定脚本
  • 运行脚本时,您希望将电子表格的所有者转移给其他用户
  • 所有者转移后,您希望保留电子表格作为读取器而非写入器的权限

修改点:

  • 在这种情况下,我认为;权限:插入"以及";权限:更新";驱动API(在这种情况下,驱动API与高级谷歌服务一起使用。)可能可以用于实现您的目标
  • 我的求婚脚本流程如下
  1. 为您检索权限ID。
    • 在当前阶段,您是文件的所有者
  2. 转移文件的所有者(在您的情况下,它是电子表格。)。
    • 在当前阶段,您不是所有者。将您的权限从writer更新为reader
  3. 创建所有者传送的电子表格到根文件夹的快捷方式。
    • 因为,当转移所有者时,可以在"与我共享">
    • 如果不需要创建快捷方式,请删除此部分

这个流被反映到一个脚本中,它变成如下。

修改的脚本:

请将以下脚本复制并粘贴到谷歌电子表格的容器绑定脚本的脚本编辑器中。而且,在使用此脚本之前,请在高级谷歌服务中启用Drive API。

function myFunction() {
const email = "###"; // Please set the email. The owner of the file is transferred to this email.
const fileId = SpreadsheetApp.getActive().getId();

// 1. Retrieve the permission ID for you. In the current stage, you are the owner of the file.
const permissionId = Drive.Permissions.list(fileId).items[0].id;
// 2. Transfer the owner of file (in your case, it's Spreadsheet.). In the current stage, you are not the owner.
Drive.Permissions.insert({role: "owner", type: "user", value: email}, fileId, {sendNotificationEmail: false, moveToNewOwnersRoot: true});
// 3. Update your permission from `writer` to `reader`.
Drive.Permissions.update({role: "reader"}, fileId, permissionId);
// 4. Create a shortcut of the owner-transferred Spreadsheet to the root folder. Because, when the owner is transferred, the file can be seen at the folder of "Shared with me".
Drive.Files.insert({mimeType: MimeType.SHORTCUT, shortcutDetails: {targetId: fileId}}, null);
}

注:

  • 当运行上述脚本时,电子表格的所有者将更改为email。你的许可变成了读者。因此,在这种情况下,您无法看到电子表格的脚本。请小心
  • 在这种情况下,电子表格的所有者更改后,您将无法编辑电子表格和脚本。所以请小心

参考文献:

  • 权限:插入
  • 权限:更新

我在下面测试了自己的文件,只有我可以访问该文件。

代码:

function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var file = DriveApp.getFileById(ssId);
var owner = file.getOwner();
var new_owner = 'new_owner@gmail.com';
file.setOwner(new_owner);
file.removeEditor(owner);    // After this line, you can't view/edit the file
Logger.log(file.getOwner()); // Will fail
}

测试过程中注意的事项:

  • 在将另一个用户设置为所有者后,在自己身上运行removeEditor将限制您在测试中查看文件
  • 拥有者对removeEditor免疫(无法移除)
  • 只有所有者才能将所有权设置为其他用户

请看一个类似的问题,它有一个指向这一点的答案,它将给你一些关于谷歌应用程序领域授权的见解。

相关内容

最新更新