好的,我正在为我们的Intranet编写Google Apps脚本,我希望能够在Google云端硬盘上显示文件夹中的文件列表。但是,我只想显示用户有权访问的文件。
有一个方法getViewers
,它将返回一个字符串列表:
https://developers.google.com/apps-script/class_file#getViewers
问题在于,虽然它返回了权限列表中的个人的电子邮件地址,但它返回组名。这不太理想,因为无法使用GroupsManager获取组对象 - 它只需要组ID。
尽管如此,我还是可以做些事情。我试过的一件事是:
var files = DocsList.getFolderById('0B_Zfq-SOMETHINGIJUSTMADEUP').getFiles();
for (f = 0; f < files.length; f++){
var viewers = files[f].getViewers();
var flag = false;
// userGroups is the list of group objects, from this session's user
for (i=0; i < usersGroups.length; i++){
var groupName = userGroups[i].getName();
if (viewers.indexOf(groupName) > -1){
flag = true;
}
}
if (flag){
// print the link to file within the HTML template
}
}
但是,由于显而易见的原因,加载页面的时间非常长。加载时间为5分钟。我真正需要的是能够从getViewers
方法获取组电子邮件地址列表。它返回单个用户的电子邮件,但是组的组名称似乎很奇怪。有没有人知道任何解决方案或解决方法?
答案 0 :(得分:0)
您最好的选择可能是使用cache将groupIds映射到组名,然后使用它而不是GroupManager服务,否则每次脚本运行时它都是一个年龄。根据Intranet站点的文档列表的“实时”方式,您还可以使用目录映射的缓存来加快速度。
如果文件和目录列表的权限非常可变,则可以通过time-based-trigger上运行的帮助程序脚本预先填充缓存,以满足您的需求。
这是一个很好的建议,可以将issue tracker添加为功能请求。