谷歌应用脚本:是不是可以在发送共享通知的同时限制文件的共享设置?
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.如果role
是writer
,那么即使copyRequiresWriterPermission
是true
,似乎也可以下载和复制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
时,在我的环境中,copyRequiresWriterPermission
为true
,即使发送通知邮件也无法进行复制和下载。这个怎么样?
【参考方案1】:
我正在回答我自己的问题,因为(正如 Tanaike 所建议的那样)通过MailApp
而不是Drive.Permissions.insert
发送通知可以解决问题。即使电子邮件包含共享文件的 URL,文件本身也会受到限制。
与此行为不同,Drive.Permissions.insert
中的emailMessage
显然将受限制文件的副本附加到电子邮件通知中,从而违背了限制的目的。
我在下面粘贴了我的函数的新版本(请注意,我必须稍微更改第一个参数,以便在函数中获取 URL)。我不确定这是否是最好的方法,我仍然对 DriveApp 中的文件 ID 和文件句柄感到有些困惑。
另外,我仍然对emailMessage
在Drive.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=0
和role='reader'
。
【讨论】:
以上是关于谷歌应用脚本:是不是可以在发送共享通知的同时限制文件的共享设置?的主要内容,如果未能解决你的问题,请参考以下文章