设置权限共享如何使用和设置到期时间?

时间:2019-07-27 11:57:18

标签: google-apps-script google-sheets

这是我的脚本,用于设置对gmail的“查看者”权限,并且我对其进行了改进,以通过“ expirationTime”将对gmail的“查看者”权限设置为。但是我遇到了两个大问题:

1 /脚本可以运行,但是我不知道要测试它是否可以与“ expirationTime”一起使用,因为如果我们手动设置到期时间,则ggsheet会在第二天23:59给您,因此我认为函数“ expirationTime” ”仅适用于该表格,这意味着您必须等到第二天才能测试,编辑v..v ..代码(如果可以的话)太长了。 所以我不知道代码是否与“ expirationTime”一起使用? (它仅已运行,我将其设置为下一个日期以进行测试)

2 /如果我的代码确实取得了成果,您能否让我理解如何在脚本中添加“ expirationTime”(因为它的概念满足了我的工作需求)以及快速对其进行测试的方法。

3 /我用currentime的更改分钟测试了很多次,但是“ expirationTime”似乎不起作用,但是为什么呢?它成功设置了查看器,但是“查看器”权限不能在该时间之后过期。

非常努力,谢谢您提供任何帮助。

function SetViewer(){
  var app = SpreadsheetApp.openById('1UfT0WriidphNwVhIMnnkOjMmkkg6jl2zIJ8xtqqR1Sg').getSheetByName('Sheet1');
  var dataLength = getDataLength();  
  var data = getSheetValues()  
    for(var i = 1; i < dataLength; i++) {
      if(data[i]["Viewers"] !== "OK")
    continue;
    var address = app.getRange(i+1,9).getValue();
    Logger.log(address);
      var openss = SpreadsheetApp.openByUrl(address);
    var fileId = openss.getId();
    var mail = app.getRange(i+1,2).getValue();
     var pid = Drive.Permissions.insert(
   {'role': 'reader', // writter, reader https://developers.google.com/drive/api/v3/reference/permissions
     'type': 'user',
    'value': mail,},
   //'expirationTime': '2019-07-28T00:01:00+07:00'},
   fileId,{'sendNotificationEmails': 'false' }   
    );
      Drive.Permissions.update(
      {'role': 'reader', // writter, reader https://developers.google.com/drive/api/v3/reference/permissions
       'type': 'user',
       'value': mail,
       'expirationTime': '2019-07-27T17:33:00+07:00'
      },
        fileId,''+pid.id
      );
     // DriveApp.getFileById(fileId).addViewer(mail);
    }}
//var ss = SpreadsheetApp.openByUrl('YOU_SPREADSHEET_URL_HERE');
//var fileId = ss.getId();
//DriveApp.getFileById(fileId).addEditor('EDITOR_EMAIL_ADDRESS_HERE');

function getSheetValues() {
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var dataObject = sourceSheet.getDataRange().getValues(); // get every row value from the chosen sheet and put into an object
  var aObject = {};
  for(var i = 0; i < dataObject.length; i++) {
    aObject[i] = dataObject[i];
    for(var j = 0; j < aObject[i].length; j++) {
      aObject[i][dataObject[0][j]] = dataObject[i][j];
    }
  }
  return aObject;
}
function getDataLength() { //get total number of data
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var sourceData = sourceSheet.getDataRange().getValues();
  return sourceData.length;
}

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('QUẢN LÝ PHÂN QUYỀN')
   .addItem('Set Viewer', 'SetViewer')
   .addItem('Set Editor', 'SetEditor')
   .addItem('Remove Viewer', 'RemoveViewers')
   .addItem('Remove Editor', 'RemoveEditor')
   .addToUi();
 }

我期望为此脚本设置一个“ expirationTime”。

1 个答案:

答案 0 :(得分:0)

正如我所见,您正在使用Google云端硬盘高级服务。但是有Google Drive API v2。

expirationTime在v3中提供。 v3尚不适用于Google云端硬盘高级服务。

您可以使用OAuth2 for Apps ScriptUrlFetchApp来调用v3 API。

您也可以尝试Apps-Script-Drive-v3-Library