访问Team Drive中的文件和文件夹

时间:2018-01-11 18:08:01

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

我正在使用Google Apps脚本和Drive API的V2(我不认为V3在脚本中可用),以便在Team Drive内自动创建文件。我想用脚本添加编辑器但没有成功。

我可以使用标准FolderIterator方法中的DriveApp访问Team Drive和子文件夹。

尝试1

function addUserToTeam(email, folders) {

  // Open the team drive and get all the folders
  var teamFolders = DriveApp.getFolderById('TEAMDRIVEIDSTRING').getFolders();

  var folders = ["folderIdToMatch"]  // This may hold multiple folders

  try {
  // Loop an array of folder IDs
    for(var i=0; i<folders.length; i++) {

      // Check the team drive folders for a matching name
      while(teamFolders.hasNext()) {
        var teamFolder = teamFolders.next();
        if(folders[i] == teamFolder.getId()) {
          teamFolder.addEditor(email);
        }
      }
    }
  } catch(e) {
    Logger.log(e);
  }
}

Exception: Cannot use this operation on a Team Drive item失败了。

尝试2

我通过替换teamFolder.addEditor(email) Permissions资源来尝试Drive API:

if(folders[i] == teamFolder.getId()) {
  var resource = {
    "type":"user",
    "role":"writer",
    "value": email
  }
  Drive.Permissions.insert(resource, teamFolder.getId());
}

此操作因File not found错误而失败。

我可以使用DriveApp方法找到文件夹(或文件)。任何与Drive API相同的尝试都会失败。

我找不到任何文档说API无法访问Team Drive文件。我的做法有问题吗?

2 个答案:

答案 0 :(得分:3)

经过更多的研究和挖掘,这是针对具有类似用例的人的解决方案。

  1. 您可以访问整个Team Drive 的文件到驱动器内的文件,但不能访问文件夹。这样做的目的是为了防止意外地将敏感信息目录访问给不应该访问的人。

  2. 要授予访问权限,supportsTeamDrives是请求正文中的可选参数,其值为boolean。将其设置为true并传入API调用。一个成功的功能如下。

  3. 实现我所描述的结果的唯一方法是使用多个Team Drives并根据某些事件授予用户访问权限。另一种选择是在项目期间将用户提升为完全权限(来自编辑或查看),然后在完成时撤销。

  4. 将用户添加到团队驱动器

    (这也适用于云端硬盘中的单个文件)

    // Using Google Apps Script with v2 of the Drive API enabled
    function addToTeamDrive() {      
      var resource = {
          'value': emailString,
          'type': 'user',
          'role': 'writer'
        }
    
        // If you have several Team Drives, loop through and give access
        try {
          var TeamDrive = Drive.Teamdrives.list();
          for(var i = 0; i < TeamDrive.items.length; i++) {
            if(TeamDrive.items[i].name === "Team Drive String") {
              // This ID may also be a single file inside a Team Drive
              var id = TeamDrive.items[i].id;
            }
          }
    
          // Add user permissions to the matched Drive
          Drive.Permissions.insert(resource, id, {"supportsTeamDrives": true});
        } catch(e) {
          Logger.log(e);
        }
    }
    

答案 1 :(得分:0)

您可以访问,但是有很多您无法访问removeFile()getUrl(),即使您拥有完全访问权限。您仍然会得到

{error: "Exception: Cannot use this operation on a Team Drive item."}

解决方法是在文件/文件夹上使用setTrashed()而不是removeFile()