我可以阻止具有编辑权限的人修改我的 google 应用程序脚本吗?

Can I prevent people with edit access from modifying my google apps script?

我在特定的传播sheet 上有一个 google 应用程序脚本,我已授予从我的帐户写一封电子邮件的权限。其他一些人也可以 'edit' 访问价差 sheet。我想知道是否有任何方法可以防止具有 'edit' 访问权限的人修改我的脚本并从帐户发送恶意电子邮件?

我探索了以下选项:

  1. 在个人上创建库 sheet 并阅读其他人也可以访问的代码。这只是对其他人隐藏了代码,但他们仍然可以写电子邮件,因为脚本区域已经有写电子邮件的权限。
  2. 创建附加组件,这是我目前正在研究的。

下面您可以看到我的脚本示例,该脚本在传播内的编辑时触发sheet。

function onEditTrigger(e) 
{
  var row = e.range.rowStart;
  var column=e.range.columnStart;
  
  if (row==1 && column ==1)
  {
  GmailApp.sendEmail("xxx@gmail.com","Subject","Email content");
  }
  
  }

我想做的是在有人编辑 A1 单元格时从我的帐户发送一封电子邮件。但我想控制从我的邮箱发送的内容。目前任何可以编辑 sheet 的人也可以编辑从邮箱发送的电子邮件,这是我不喜欢的。

我能否限制他人,使他们无法利用我最初授予的电子邮件权限来编辑我帐户中的电子邮件内容。

编辑:235325 需要说明的是,我并不担心代码的正常运行。我只是想要一种保护脚本的方法,这样对传播 sheet 具有 'edit' 权限的流氓就不能编辑我的脚本来发送 he/she 想要的任何电子邮件。

通过创建未绑定脚本并调用以下全局变量来隔离代码:

var ss = SpreadsheetApp.openById("yourSheetIdHere");
var sheet = ss.getSheetByName("sheetName");
/* do more stuff */

这样一来,您就是唯一运行使用脚本发送电子邮件的用户。当脚本未绑定时,它总是 运行 与您一样,没有编辑权限的人无法打开。不过,您需要创建一个触发器来监视 sheet。 From the Google Apps docs:

function createSpreadsheetEditTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('myFunction')
      .forSpreadsheet(ss)
      .onEdit()
      .create();
}

然后,为了超级确定没有人在乱用您的电子邮件,您可以采用几种方法中的一种,都使用 Session.getActiveUser()

方法一 - 以活动用户身份发送电子邮件。

这很简单 - 使用 Session.getActiveUser().getEmail() 设置一个 email 变量并将其传递到您的 GmailApp 方法中。这将设置要从 sheet 编辑器发送的电子邮件地址。

方法二 - 验证尝试 运行 函数的用户。

您还可以将经过身份验证的用户存储在脚本中的数组中。使用 Session.getActiveUser().getEmail() 并检查数组是否包含电子邮件地址。如果是这样,return true 来自验证器函数并继续。如果不是,请传递错误消息。

Here's the Google Documentation关于方法。

还有一种方法可以保护您的代码。

  1. 创建一个独立的脚本来接收电子邮件参数数据并发送一封电子邮件,该电子邮件将运行代表您的帐户并且只与您共享。
  2. 使用绑定脚本中的 UrlFetchApp 通过 GETPOST 发送数据。

这样您就可以控制您的代码和电子邮件内容。