首页 > 解决方案 > 如何使用和设置过期设置权限共享?

问题描述

这是我将“查看者”权限设置为 gmail 的脚本,我改进了它以使用“过期时间”将“查看者”权限设置为 gmail。但我遇到了两个大问题:

1/脚本可以运行,但我不知道测试它是否与“expirationTime”一起工作,因为如果我们手动设置过期,默认时间ggsheet给你是第二天23:59,所以我认为函数“expirationTime”只工作使用这种形式意味着您必须等到第二天才能进行测试,编辑 v..v.. 如果代码有效,则它太长了。所以我不知道代码是否适用于“expirationTime”?(它只是已经运行了,我将它设置到下一个日期以做出测试结果)

2/ 如果我的代码没有产生结果,你能让我了解如何在我的脚本中添加“expirationTime”(因为它的概念符合我的工作需求)以及快速测试它的方法。

3/我用当前时间的改变分钟测试了很多次,但似乎“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”以供使用。

标签: google-apps-scriptgoogle-sheets

解决方案


如我所见,您使用的是 Google Drive Advanced Service。但是有 Google Drive API v2。

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

您可以将 OAuth2 用于 Apps 脚本UrlFetchApp调用 v3 API。

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


推荐阅读