【问题标题】:Drive.Permissions.insert (Value) - Drive API, can you use an array under 'value'?Drive.Permissions.insert (Value) - Drive API,你可以在“value”下使用数组吗?
【发布时间】:2020-03-26 00:53:23
【问题描述】:

是否可以在此处使用“值”下的数组来阻止我创建群组别名电子邮件地址?例如:

userValues = ["user1@abc.com", "user2@abc.com", "user3@abc.com"];

Drive.Permissions.insert({
    'role': 'writer',
    'type': 'user',
    'value': ** userValues ** ,
  },
  folder, {
    'sendNotificationEmails': 'false'
  });

【问题讨论】:

  • 在当前阶段,在Drive.Permissions.insert,一个电子邮件可以用于一个呼叫。因此,不幸的是,不能使用这种方法。作为一种解决方法,如何使用批处理请求?使用批量请求时,一个API调用可以完成100个API调用,并且可以与异步进程一起运行。 Ref如果要使用数组和Drive.Permissions.insert,在当前阶段,需要在for循环中运行Drive.Permissions.insert。如果我误解了您的问题,我深表歉意。
  • 谢谢@Tanaike!我会调查的!到目前为止,我只需要为两个用户使用它,但谁知道呢,这个列表可能会变得更大。因此,如果发生这种情况,请立即寻找替代方案。
  • 如果你使用批处理请求,例如,有一个GAS库用于运行批处理请求。 github.com/tanaikech/BatchRequest
  • 我认为当示例脚本显示时,这可能对您和其他用户有用。所以我提出了 2 个示例脚本。你能确认一下吗?如果这不是您想要的方向,我很抱歉。

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


【解决方案1】:
  • 您想授予使用多个电子邮件地址的文件和文件夹的权限。
    • 例如,您想使用像userValues = ["user1@abc.com", "user2"@abc.com", "user3@abc.com"]; 这样的数组
  • 您希望使用 Google Apps 脚本实现此目的。

我可以像上面那样理解。如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

问题和解决方法:

在当前阶段,Drive.Permissions.insert() 可以为一封电子邮件创建权限。遗憾的是,无法通过一通Drive.Permissions.insert() 来创建多个电子邮件的权限。如果要使用数组和Drive.Permissions.insert,在当前阶段,需要在for循环中运行Drive.Permissions.insert

作为一种解决方法,在这里,我想建议使用批处理请求。使用批量请求时,一个API调用可以完成100个API调用,并且可以与异步进程一起运行。

模式一:

在此模式中,批处理请求使用 UrlFetchApp 运行。

示例脚本:

在运行脚本之前,请设置文件 ID 和电子邮件地址。如果要给文件夹添加权限,请将文件夹ID设置为const fileId = "###";###

function myFunction() {
  const fileId = "###";  // Please set the file ID.
  const userValues = ["user1@abc.com", "user2"@abc.com", "user3@abc.com"];  // Please set the email addresses.

  const resources = userValues.map(e => ({role: "writer", type: "user", emailAddress: e}));
  const boundary = "xxxxxxxxxx";
  const payload = resources.reduce((s, e, i) => {
    s += "Content-Type: application/http\r\n" +
      "Content-ID: " + i + "\r\n\r\n" +
      "POST https://www.googleapis.com/drive/v3/files/" + fileId + "/permissions?sendNotificationEmails=false" + "\r\n" +
      "Content-Type: application/json; charset=utf-8\r\n\r\n" +
      JSON.stringify(e) + "\r\n" +
      "--" + boundary + "\r\n";
    return s;
  }, "--" + boundary + "\r\n");
  const params = {
    method: "post",
    contentType: "multipart/mixed; boundary=" + boundary,
    payload: payload,
    headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()},
  };
  const res = UrlFetchApp.fetch("https://www.googleapis.com/batch", params);
  console.log(res.getContentText())
}

模式 2:

在此模式中,使用了用于批处理请求的 Google Apps 脚本库。

示例脚本:

在运行脚本之前,请设置文件 ID 和电子邮件地址,以及please install the GAS library.

function myFunction() {
  const fileId = "###";  // Please set the file ID.
  const userValues = ["user1@abc.com", "user2"@abc.com", "user3@abc.com"];  // Please set the email addresses.

  const reqs = userValues.map(e => ({
    method: "POST",
    endpoint: "https://www.googleapis.com/drive/v3/files/" + fileId + "/permissions?sendNotificationEmails=false",
    requestBody: {role: "writer", type: "user", emailAddress: e},
  }));
  const requests = {batchPath: "batch/drive/v3", requests: reqs};
  const res = BatchRequest.Do(requests);
  console.log(res.getContentText())
}

注意:

  • 请在脚本编辑器中启用 V8。
  • 在上面的脚本中,作为一个示例脚本,请求的最大数量是100。如果你想请求超过100,请修改上面的脚本。请注意这一点。

参考资料:

【讨论】:

  • 谢谢田池!当我开始深入研究 Drive API 时,我一定会尝试这个。
  • @JMR 感谢您的回复。如果我的回答对您的情况有用,我很高兴。
【解决方案2】:

你可以用这样的数组设计一个函数:

function setpermisosreader(id,array){

var file = DriveApp.getFileById(id)
var editors = file.getEditors();
if (editors.length > 0) {
for (var i = 0; i < array.length; i++) {
Drive.Permissions.insert({'role': 'reader','type': 'user','value': array[i]},id, 
{'sendNotificationEmails': 'false' });};};

 }

function setpermisoswriter(id,array){

var file = DriveApp.getFileById(id)
var editors = file.getEditors();
if (editors.length > 0) {
for (var i = 0; i < array.length; i++) {
Drive.Permissions.insert({'role': 'writer','type': 'user','value': array[i]},id, 
{'sendNotificationEmails': 'false' });};};

 }

 function test(){
 var idfolder= "idfile/folder" 
 var array1 = ["mail1","mail2","mail3"]
 var array2 = ["mail1","mail2","mail3"]
 setpermisosreader(idfolder,array1)
 setpermisoswriter(idfolder,array2)

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2022-07-25
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2018-01-25
    相关资源
    最近更新 更多