谷歌应用脚​​本:是不是可以在发送共享通知的同时限制文件的共享设置?

Posted

技术标签:

【中文标题】谷歌应用脚​​本:是不是可以在发送共享通知的同时限制文件的共享设置?【英文标题】:google apps script: is it possible to restrict the sharing settings of a file while still sending a sharing notification?谷歌应用脚​​本:是否可以在发送共享通知的同时限制文件的共享设置? 【发布时间】:2020-11-26 23:27:09 【问题描述】:

我编写了一个 Google Apps 脚本函数,旨在共享 Google Drive 文件,但阻止收件人复制/下载/打印所述文件。

function shareFile(Id,addr,role,opt,msg)
  var sendNotifications;
  var fileId = Drive.Files.get(Id);
  Logger.log('File "%s", restricted label was: %s', fileId.title, fileId.labels.restricted);

  
  // cambia l'etichetta per limitare l'accesso (stampa, copia, scarica)
  // changes the labels in order to restrict access
  if(opt == 0) fileId.labels.restricted = true;
  else fileId.labels.restricted = false;
  
  // aggiorna le proprietà
  // update labels
  Drive.Files.update(fileId, Id);
   
  // notifiche
  // notifications
  if(msg==="") sendNotifications='false';
  else sendNotifications='true';
   
   
 Drive.Permissions.insert(
        
         'role': role,
         'type': 'user',
         'value': addr
        ,
        Id,
        
         'sendNotificationEmails': sendNotifications,
         'emailMessage': msg
         );       

在编写这个函数时,我受到了this 和this 的启发。

当没有向收件人发送通知时,我的函数似乎确实有效(最后一个参数为空,msg="")。 在这种情况下,该文件会出现在收件人 Google 云端硬盘的“与我共享”部分,他们唯一可能的操作是为其创建快捷方式。不允许下载、复制、打印、分享。

当 msg 不为空时,将向收件人发送电子邮件通知。问题是文档附加到电子邮件中,收件人可以下载它(并因此分发它)。 但是,如果从收件人 Google 云端硬盘的“与我共享”部分打开该文档,它似乎仍然受到限制。收件人无法下载、打印或复制。

我觉得这有点奇怪,但也许这是预期的行为。

原则上,我想通知收件人与他/她共享了一个文件,其中可能包括一个 Google 云端硬盘链接。将文档附加到电子邮件似乎违背了限制标签的目的。但我可能遗漏了一些东西,而且很可能我想要的东西可以用更干净的方式实现。

我做了一些研究,但结果更加困惑。 如果我做对了,this post Tanaike 说“labels.restricted”已被弃用。 这可能是我的脚本失败的原因(假设它实际上失败了)吗? 我仍然不太了解 Tanaike 的解决方法。

非常感谢您的任何见解 弗朗切斯科

【问题讨论】:

首先,我深表歉意,我的回答对您的情况没有用处。我有 3 个问题。 1.在你的脚本中,我可以问你role的值吗? 2.如果rolewriter,那么即使copyRequiresWriterPermissiontrue,似乎也可以下载和复制Document。这与The problem is that the document is attached to the email and the recipient can download it (and hence distribute it). 有关吗? 3.当我看到通知邮件时,可以创建一个快捷方式。但似乎无法通过电子邮件进行下载。这个怎么样? 你好田池。我的意思是您的解决方案太先进了,我现在无法理解。我其实是打算学的。 . 感谢您的回复。我可以问你我的 3 个问题吗? 我对这样一个事实感到好奇,显然,包含一条消息会破坏文件的限制。另外,你是对的,我忘了提到收件人的角色是什么。由于他们只应该查看文档,而不是以任何方式分发它,因此我将角色设置为“读者”。剩下的参数应该很明显了:addr 是地址,opt=0 就是限制文件。我不明白你的第 3 项,对不起。 感谢您的回复。大约3,当看到通知邮件中的Google Docs,就可以创建快捷方式了。但是无法复制和下载 Google 文档。我想问一下你的情况是否和你一样。并且,当reader设置为role时,在我的环境中,copyRequiresWriterPermissiontrue,即使发送通知邮件也无法进行复制和下载。这个怎么样? 【参考方案1】:

我正在回答我自己的问题,因为(正如 Tanaike 所建议的那样)通过MailApp 而不是Drive.Permissions.insert 发送通知可以解决问题。即使电子邮件包含共享文件的 URL,文件本身也会受到限制。

与此行为不同,Drive.Permissions.insert 中的emailMessage 显然将受限制文件的副本附加到电子邮件通知中,从而违背了限制的目的。

我在下面粘贴了我的函数的新版本(请注意,我必须稍微更改第一个参数,以便在函数中获取 URL)。我不确定这是否是最好的方法,我仍然对 DriveApp 中的文件 ID 和文件句柄感到有些困惑。

另外,我仍然对emailMessageDrive.Permissions.insert 中的行为感到好奇。

function shareFile(hfile,addr,role,opt,msg)
  var sendNotifications;
  var Id = hfile.getId();  
  var fileId = Drive.Files.get(Id);
  
  var URL = hfile.getUrl();

  
  // changes the labels in order to restrict access
  if(opt == 0) fileId.labels.restricted = true;
  else fileId.labels.restricted = false;
  
  // update labels
  Drive.Files.update(fileId, Id);
  //Logger.log('File "%s", restricted label is (2): %s', fileId.title, fileId.labels.restricted);
   
  // notifications
  if(msg==="") sendNotifications='false';
  else sendNotifications='true';
  
  
  Drive.Permissions.insert(
        
         'role': role,
         'type': 'user',
         'value': addr
        ,
        Id,
        
         'sendNotificationEmails': 'false'
         );
  
  if(msg!=="")
    MailApp.sendEmail(
      to: addr,
      subject: "file condiviso",
      htmlBody: 'troverai il file nella sezione "Condivisi con me" del tuo Google Drive.' + 'oppure seguendo questo <a href="' + URL +'">questo link</a>'
  );
  
   
  
 
 
  

         

这里是opt=0role='reader'

【讨论】:

以上是关于谷歌应用脚​​本:是不是可以在发送共享通知的同时限制文件的共享设置?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用谷歌应用脚​​本发送电子邮件草稿

谷歌应用脚​​本没有循环

谷歌应用脚​​本超时 ~ 5 分钟?

谷歌应用脚​​本超时 ~ 5 分钟?

使用谷歌应用脚​​本更新数据验证规则时如何保留原始范围

丢失谷歌应用脚​​本项目