【问题标题】:Trying to get a list of groups that have permission to view a file in Google Drive试图获取有权查看 Google Drive 中文件的组列表
【发布时间】:2012-12-29 06:52:12
【问题描述】:

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

【问题讨论】:

  • 顺便说一句,您可以通过 UrlFetch 访问的已弃用 Documents API 甚至没有在 ACL 提要中列出组 - 所以不要尝试这样做 ;)

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


【解决方案1】:

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

如果文件和目录列表的权限非常多变,那么缓存可以由运行在time-based-trigger 上的帮助脚本预先填充以满足您的需要。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多