好的,我正在为我们的内部网编写一个Google Apps脚本,我希望能够显示Google Drive上文件夹中的文件列表。但是,我只想显示用户有权访问的文件。
有一个方法,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
方法中获得组电子邮件地址列表。它为单个用户返回电子邮件,而为组返回组名,这看起来真的很奇怪。有人知道这个问题的解决方案吗?
您最好的选择可能是使用将groupid映射到组名的缓存,然后使用该缓存而不是GroupManager服务,否则每次脚本运行时都会出现一个age。根据内部网站点的文档列表的"活"程度,你也可以使用目录映射缓存来加快速度。
如果文件和目录列表的权限是非常可变的,那么缓存可以由一个运行在基于时间的触发器上的帮助脚本预填充,以满足您的需求。
这是一个很好的建议,将问题跟踪器添加到功能请求中。