google-apps-script - 如何使用和设置过期设置权限共享?
问题描述
这是我将“查看者”权限设置为 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 Drive Advanced Service。但是有 Google Drive API v2。
expirationTime
在 v3 中介绍。v3 尚不适用于 Google 云端硬盘高级服务。
您可以将 OAuth2 用于 Apps 脚本和UrlFetchApp
调用 v3 API。
推荐阅读
- python - 如果边界超过,将一个 numpy 数组复制到另一个数组的一部分
- neural-network - 在 Pytorch 中正确的数据加载、拆分和扩充
- ios - swagger-codegen swift4 可编码协议
- eclipse-rcp - 本机代理未出现在应用程序中
- reactjs - 停止 create_react_app 重新安装全局包
- javascript - React Native:为什么状态变量只在热重载时更新?
- java - 如何修复执行 EValidator 时发生的错误
- gatsby - 我可以在 onCreateNode() 获得 MarkdownRemark 节点吗?
- docker - Gitlab CICD管道,带有“hashicorp/terraform:full”图像错误,带有“terraform:找不到命令”
- javascript - React-Native:Android 上的“TypeError:网络请求失败”