用于获取团队驱动器访问权限的AppScript API



我正在尝试生成一份报告所有访问权限的报告,目前各种用户在团队驱动器中都有。AppScript中是否有任何API获取此数据?

似乎没有任何用用户名分类的驱动权限的方法,因此您需要自己实现此业务逻辑。根据该文档,将GET请求发送到下面的API端点将为您提供团队驱动器的权限列表(使用Team Drive ID代替文件ID(:

https://www.googleapis.com/drive/v3/files/fileid/permissions

我没有设置任何团队驱动器 - 以下示例基于使用Drive REST API获得单个文件的权限。在执行代码之前,您必须通过在URL参数中加入API密钥并将OAuth令牌传递到" Get'Request的标题中"来证明自己的身份。可以从Google Cloud Console获得API键。启用驱动器API,然后单击左菜单中的密钥图标以设置凭据。从下拉下选择" API密钥"并复制值。

您的脚本必须将包含所有必需授权范围的令牌传递给API端点。OAuth示波器在清单文件中明确设置。在脚本编辑器中,选择"查看 - 显示清单文件",然后添加相关范围。我的清单文件中使用的范围是用于访问驱动器文件和通过urlfetchapp调用外部服务的范围:

 "oauthScopes": [
  "https://www.googleapis.com/auth/drive",
  "https://www.googleapis.com/auth/script.external_request"]

最后,获取文件的权限列表:

  var fileId = "FILE_ID";
    var apiKey = "API_KEY";
    var apiUrl = "https://www.googleapis.com/drive/v3/files/fileId/permissions";
    var token = ScriptApp.getOAuthToken();
    var header = {"Authorization":"Bearer " + token};
    var options = {
    "method":"GET",
    "headers": header,
    "muteHttpExceptions": true
    };
    var res = UrlFetchApp.fetch(apiUrl.replace("fileId", fileId) + "?key=" + apiKey, options)
                         .getContentText();
        var permissions = JSON.parse(res);
        Logger.log(permissions);

anton's 答案的帮助下更新。(也与Appmaker一起工作(。

这就是我实现的方式,

function fileExport(folderId) //pass folder id or drive/team drive id to fetch permissions
{
    var parent = DriveApp.getFolderById(folderId);
    var path = DriveApp.getFolderById(folderId).getName();
    var fileName = 'Permisssions_' + new Date(); //define file name
    var newExport = SpreadsheetApp.create(fileName); // create new spreadsheet
    var header = ["Path","Folder","File Name","Email","Role","Name","DocUrl"]; //define header
    newExport.appendRow(header); // append header to spreadsheet
    newExport.setFrozenRows(1);
    newExport.getRange("A1:H1").setFontWeight("bold");
    //traverse through each folder under current folder
    getChildFolders(parent,newExport,path);
     //appned files associated with current folder
    var files = parent.getFiles();
    while (files.hasNext()) {
      var file = files.next();
      var permitFile=  makeRestCall(file.getId());  
      for(var j=0; j<permitFile.length;j++)
      {
          newExport.appendRow([path,'',file.getName(),permitFile[j].emailAddress, permitFile[j].role,permitFile[j].displayName,file.getUrl()]);
      }
     }
    return 'File exported successfully to this path:'+ newExport.getUrl(); 
}
//Iterate through child folders using recursive call
function getChildFolders(parent,newExport,path) {
  var childFolders = parent.getFolders();
  while (childFolders.hasNext()) {
    var childFolder = childFolders.next();
    path = path +'--'+childFolder.getName();
    var permit=  makeRestCall(childFolder.getId());
    for(var i=0; i<permit.length;i++)
    {
        newExport.appendRow([path,childFolder.getName(),'',permit[i].emailAddress, permit[i].role,permit[i].displayName,childFolder.getUrl()]);
    }
    var files = childFolder.getFiles();
    while (files.hasNext()) {
      var file = files.next();
      var permitFile=  makeRestCall(file.getId());  
      for(var j=0; j<permitFile.length;j++)
      {
          newExport.appendRow([path,'',file.getName(),permitFile[j].emailAddress, permitFile[j].role,permitFile[j].displayName,file.getUrl()]);
      }
    }
    // Recursive call for any sub-folders
    getChildFolders(childFolder,newExport,path);    
  }
}
function makeRestCall(fileOrFolderId)  //make rest call to fetch permissions
{
  var apiUrl = "https://www.googleapis.com/drive/v3/files/fileId/permissions";
  var token = ScriptApp.getOAuthToken();
  var header = {"Authorization":"Bearer " + token};
  var options = {
    "method":"GET",
    "headers": header
  };
  var response = UrlFetchApp.fetch(apiUrl.replace("fileId", fileOrFolderId) + "?supportsTeamDrives=true&fields=*", options)
  .getContentText();
  var dataAll = JSON.parse(response); 
  var permit = dataAll.permissions;
  return permit;
}

最新更新