【问题标题】:Changing the owner of a folder & files within that folder更改文件夹的所有者和该文件夹中的文件
【发布时间】:2015-11-08 23:12:26
【问题描述】:

我是脚本的新手,想知道是否可以运行 google 应用程序脚本来将文件夹和子文件夹/文件的所有者权限更改为其他用户?

目前,我已经尝试过了

function myFunction() {
 var folder = DriveApp.('Shared Folder');
folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
 folder.setOwner("new email owner")
 }

这允许我让其他人成为创建文件夹的所有者,但我不确定如何为现有文件夹(以及它的子文件夹和文件)执行此操作。

此外,这些文件将归谷歌应用管理员所有(在权限更改之前)

【问题讨论】:

标签: google-apps-script google-drive-api


【解决方案1】:

根据您的描述,以下功能非常适合您的场景:

function folderTransfer()
{
  var fol = DriveApp.getFolderById("**************");
  var files = fol.getFiles();
  var me = "abc@gmail.com";
  var newOwner = "xyz@gmail.com";

  fol.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
  fol.setOwner(newOwner);
  fol.removeEditor(me);

  while (files.hasNext())
  {
    var file = files.next();
    file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
    file.setOwner(newOwner);
    file.removeEditor(me);
  }
}

删除所有者权限是可选的,但这取决于您在这种情况下的用例。使用上面的代码,如果我不删除自己的所有者身份,即使在这种情况下所有者现在是 xyz@gmail.com,我仍然可以查看和编辑文档。但是,由于所有其他人的权限都设置为仅查看,因此他们将具有仅查看权限。

请注意,这是一个简单的功能,可让我转移单个文件夹中文件的所有权。但是,类似的函数(例如 getFiles() 函数)也应该允许您使用 getFolders()。将 while 循环转移到不同的函数并传递文件夹 ID 以遍历该文件夹中的文件并以类似的方式更改它们的所有权。在第二种情况下,您的代码将如下所示:

//Transfering all files to a new owner
function fileTransfer(folderID, owner, newOwner)
{
  var folder = DriveApp.getFolderById(folderID);
  var files = folder.getFiles();

  while (files.hasNext())
  {
    var file = files.next();
    file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
    file.setOwner(newOwner);
    file.removeEditor(owner);
  }
}

function folderTransfer()
{
  var fol = DriveApp.getFolderById("************************");
  var files = fol.getFiles();
  var me = "abc@gmail.com";
  var newOwner = "xyz@gmail.com";

  var folders = fol.getFolders();
  while (folders.hasNext())
  {
    var folder = folders.next();
    var folderID = folder.getId();
    fileTransfer(folderID, me, newOwner);
    folder.setOwner(newOwner);
    folder.removeEditor(me);
  }
  //Transferring parent folder to newOwner
  fol.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
  fol.setOwner(newOwner);
  fol.removeEditor(me); 
}

您希望在何种粒度级别和多少嵌套文件夹上执行该功能以及如何遍历这些文件夹,这取决于您。但这应该让您对如何完成有一个公平的了解。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多