尝试获取有权在Google云端硬盘中查看文件的群组列表

时间:2012-12-29 06:52:13

标签: file google-apps-script google-drive-api

好的,我正在为我们的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方法获取组电子邮件地址列表。它返回单个用户的电子邮件,但是组的组名称似乎很奇怪。有没有人知道任何解决方案或解决方法?

1 个答案:

答案 0 :(得分:0)

您最好的选择可能是使用cache将groupIds映射到组名,然后使用它而不是GroupManager服务,否则每次脚本运行时它都是一个年龄。根据Intranet站点的文档列表的“实时”方式,您还可以使用目录映射的缓存来加快速度。

如果文件和目录列表的权限非常可变,则可以通过time-based-trigger上运行的帮助程序脚本预先填充缓存,以满足您的需求。

这是一个很好的建议,可以将issue tracker添加为功能请求。