Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 用于获取team drive访问权限的Appscript API_Google Apps Script_Google App Maker - Fatal编程技术网

Google apps script 用于获取team drive访问权限的Appscript API

Google apps script 用于获取team drive访问权限的Appscript API,google-apps-script,google-app-maker,Google Apps Script,Google App Maker,我正在尝试生成一个报告,其中包含当前各种用户在Team Drive中拥有的所有访问权限。Appscript中是否有用于获取此数据的API 似乎没有任何方法可以获得按用户名排序的驱动器权限,因此您需要自己实现此业务逻辑。根据文档,向下面的API端点发送GET请求将获得团队驱动器的权限列表(使用团队驱动器ID而不是文件ID): 我没有设置任何团队驱动器-下面的示例基于使用驱动器REST API获取单个文件的权限。在代码可以执行之前,您必须通过在URL参数中包含API密钥并在“GET”请求的头中传递

我正在尝试生成一个报告,其中包含当前各种用户在Team Drive中拥有的所有访问权限。Appscript中是否有用于获取此数据的API

似乎没有任何方法可以获得按用户名排序的驱动器权限,因此您需要自己实现此业务逻辑。根据文档,向下面的API端点发送GET请求将获得团队驱动器的权限列表(使用团队驱动器ID而不是文件ID):

我没有设置任何团队驱动器-下面的示例基于使用驱动器REST API获取单个文件的权限。在代码可以执行之前,您必须通过在URL参数中包含API密钥并在“GET”请求的头中传递OAuth令牌来证明您的身份。 API密钥可以从Google云控制台获得。启用驱动器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);

似乎没有任何方法可以获得按用户名排序的驱动器权限,因此您需要自己实现此业务逻辑。根据文档,向下面的API端点发送GET请求将获得团队驱动器的权限列表(使用团队驱动器ID而不是文件ID):

我没有设置任何团队驱动器-下面的示例基于使用驱动器REST API获取单个文件的权限。在代码可以执行之前,您必须通过在URL参数中包含API密钥并在“GET”请求的头中传递OAuth令牌来证明您的身份。 API密钥可以从Google云控制台获得。启用驱动器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的回答更新。(也与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;
}
function fileExport(folderId)//传递文件夹id或驱动器/团队驱动器id以获取权限
{
var parent=DriveApp.getFolderById(folderId);
var path=DriveApp.getFolderById(folderId.getName();
var fileName='permissions\'+new Date();//定义文件名
var newExport=SpreadsheetApp.create(文件名);//创建新的电子表格
var header=[“路径”、“文件夹”、“文件名”、“电子邮件”、“角色”、“名称”、“DocUrl”];//定义头
newExport.appendRow(标题);//将标题附加到电子表格
newExport.setFrozenRows(1);
newExport.getRange(“A1:H1”).setFontWeight(“粗体”);
//遍历当前文件夹下的每个文件夹
getChildFolders(父级、新导出、路径);
//与当前文件夹关联的已应用文件
var files=parent.getFiles();
while(files.hasNext()){
var file=files.next();
var permitFile=makeRestCall(file.getId());

对于(var j=0;j在Anton的回答的帮助下进行更新。(同时与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;
}
function fileExport(folderId)//传递文件夹id或驱动器/团队驱动器id以获取权限
{
var parent=DriveApp.getFolderById(folderId);
var path=DriveApp.getFolderById(folderId.getName();
var fileName='permissions\'+new Date();//定义文件名
var newExport=SpreadsheetApp.create(文件名);//创建新的电子表格
var header=[“路径”、“文件夹”、“文件名”、“电子邮件”、“角色”、“名称”、“DocUrl”];//定义头
newExport.appendRow(标题);//将标题附加到电子表格
newExport.setFrozenRows(1);
newExport.getRange(“A1:H1”).setFontWeight(“粗体”);
//遍历当前文件夹下的每个文件夹
getChildFolders(父级、新导出、路径);
//与当前文件夹关联的已应用文件
var files=parent.getFiles();
while(files.hasNext()){
var file=files.next();
var permitFile=makeRestCall(file.getId());

对于(var j=0;jI目前不认为DriveApp中支持团队驱动。我可以看到Powertools提供此报告,那么是否有其他方法可以获取此数据?@DarpanSanghavi是的,使用驱动API(即高级服务)。您能为我提供此用例的refn链接吗?我知道DriveAPI,但找不到任何用于获取Team Drive文件访问权限的refn。您可能需要检查此问题。我认为DriveApp目前不支持Team Drive。我可以看到Powertools提供此报告,因此是否有其他方法可以获取此数据?@DarpanSanghavi是的,使用驱动器API(即高级服务)。您能为我提供此用例的refn链接吗?我知道DriveAPI,但找不到任何用于获取Team Drive文件访问权限的refn。您可能想检查此问题。您不使用本机客户端库/高级服务,而更喜欢UrlFetchApp的原因是什么?原因就是您上面提到的原因-这s方法使用了Advanced Drive似乎不支持的版本3的驱动器API,但我不知道它是否支持传递团队驱动器ID以及文件ID.apps脚本