Google云端硬盘更改文件夹中的文件权限

时间:2014-07-12 20:19:53

标签: permissions google-apps-script google-drive-api file-ownership

我想知道是否有人可以提供帮助。我们使用Google Apps for Education。在系统中,我们有一个共享文件夹,教师可以在其中放置文件供学生访问。例如。整个由8名科学教师组成的团队都将文件添加到“科学共享”中。

Science共享文件夹位于单独的Google帐户“science-shared@domain.com”

随着时间的推移,文件将占用单个用户的配额,如果他们离开并且他们的帐户被删除,所有这些文件都会被删除。我们显然不希望使用转移设施将他们的整个数据转移到科学共享。

理想情况下,我正在寻找某种类型的脚本,它可以遍历共享文件夹并更改每个文件和文件夹的权限,以便科学共享是所有者,而个别教师具有编辑权限。

这是否可能,如果是这样,任何人都可以提供一些帮助,如何/从哪里开始......目前无能为力。

提前致谢。

1 个答案:

答案 0 :(得分:0)

编辑:

请参阅issue 2756,注意管理员无法通过Google Apps脚本更改文件的所有权:

  

...这与您无法为文件更改自己的事实有关   你不拥有。任何非法ACL更改都会发生此错误,例如   当你是一名观众时,试图调用addEditor()。

要更改非管理员拥有的文件的所有权,他们必须使用Google Drive SDK,通过OAuth进行身份验证。


这当然是可行的,但仅适用于运行脚本的用户拥有的文件。

这是一个脚本,可以在Science Shared文件夹中找到当前用户拥有的所有文件,并将所有权转让给用户science-shared。它被设计为包含电子表格的脚本,该脚本创建自定义菜单并使用电子表格浏览器UI。将电子表格放入您的共享目录中,任何教师都应该能够使用它来批量传输自己的文件。

管理员应该可以使用该脚本更改任何教师的文件 - 只需收集origOwner的ID,然后将其传递给chownFilesInFolder

警告:它只处理文件而不是子目录 - 如果需要,你可以扩展它。

/**
 * Find all files owned by current user in given folder, 
 * and change their ownership to newOwner.
 * Note: sub-folders are untouched
 */
function chownFilesInFolder(folderId,origOwner,newOwner) {
  var folder = DriveApp.getFolderById(folderId);
  var contents = folder.getFiles();

  while(contents.hasNext()) {
    var file = contents.next();
    var name = file.getName();
    var owner = file.getOwner().getEmail();
    // Note: domain security policies may block access to user's emails
    // If so, this will return a blank string - good enough for our purposes.

    if (owner == origOwner) {
      // Found a file owned by current user - change ownership
      Logger.log(name);
      //file.setOwner(newOwner);
    }   
  }
};

/**
 * Spreadsheet browser-based UI driver for chownFilesInFolder()
 */
function changeOwnership() {
  var resp = Browser.msgBox("Transfer 'Science Shared' files",
                            "Are you sure you want to transfer ownership of all your shared files?",
                            Browser.Buttons.YES_NO);

  if (resp == "yes") {
    var folderName = "Science Shared";
    // Assume there is just one "Science Shared" folder.
    var folder = DriveApp.getFoldersByName(folderName);
    if (!folder.hasNext()) {
      throw new Error("Folder not found ("+folderName+")");
    }
    else {
      var folderId = folder.next().getId();
      var origOwner = Session.getActiveUser().getEmail();  // Operate on own files
      var newOwner = "science_shared@example.com";

      chownFilesInFolder(folderId,origOwner,newOwner);

      Browser.msgBox("Operation completed", Browser.Buttons.OK);
    }
  }
  else Browser.msgBox("Operation aborted", Browser.Buttons.OK);
}

/**
 * Adds a custom menu to the active spreadsheet, containing a single menu item
 */
function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Transfer 'Science Shared' files",
    functionName : "changeOwnership"
  }];
  spreadsheet.addMenu("Science-Shared", entries);
};

我希望这有助于您入门。