通过脚本在团队驱动器文件上设置权限

时间:2019-06-18 21:42:05

标签: javascript google-apps-script google-drive-api gsuite drive

我正在编写一个简单的应用程序脚本,以对位于公司teamdrive上的文件设置权限。要启用的文件和用户将写入Google表格文档中。该脚本读取文件名和用户(由其电子邮件标识)的每一行,并设置“查看者”权限。基本脚本可以正常工作,但具有令人讨厌的功能,可以向设置了权限的每个用户发送电子邮件。 这是工作代码:

    function simpleSetFilePermission_v1(filename, user_email){
      var files = DriveApp.getFilesByName(filename);

        while (files.hasNext()) {
          var file = files.next();
          if (file) {
            file.addViewer(user);
            return file;
          }
        }
    }

寻找避免邮件通知的解决方案我遇到了各种各样的文章,这些文章建议启用高级功能并使用高级Google服务(stack overflow post)访问TeamDrive上的文件。 问题是带有应用程序脚本gsuite的APIS不起作用。

    function simpleSetFilePermission_v2(filename, user_email){
      var files = DriveApp.getFilesByName(filename);

        while (files.hasNext()) {
          var file = files.next();
          if (file) {

            var _f_id = file.getId();

            Drive.Permissions.insert(
            {
              'role': 'reader',
              'type':'user',
              'value': user_email
            },
            _f_id,
            {
                'sendNotificationEmails': 'false'
            });
            return file;
          }
        }
    }

在此函数中,使用 Drive.Permissions 函数时出现“找不到文件”错误。我还尝试了其他具有相同错误的 Drive。* 函数。使用本机 DriveApp。* 函数可以正常运行,并且文件ID相同,而 Drive。* 函数会出错。

管理员是否必须设置一些权限(当然,我已经启用了高级服务)? 将API与Google App脚本一起使用是否有一些限制?预先感谢

Guido

1 个答案:

答案 0 :(得分:1)

首先,您收到“找不到文件”错误,因为您列出的文件中没有“ includeItemsFromAllDrives”布尔值。直到2020年,它都将成为list命令的默认属性,才有必要。否则,它将不会尝试在Team Drives中查找文件。

第二,您需要在insert权限调用中添加“ supportsAllDrives”布尔值。这也是2020年的默认属性。

第三点,也是更重要的一点是,您不能在Team Drive中降低某个文件的用户权限。例如,您可以向查看者授予“编辑”权限,但不能从“贡献者”中删除“编辑”权限。您可以找到有关权限here的更多信息。