我是否可以阻止具有编辑权限的人修改我的Google Apps脚本?

时间:2017-04-28 12:28:13

标签: google-apps-script google-sheets google-apps

我在特定电子表格上有一个谷歌应用程序脚本,我已经允许我从我的帐户写一封电子邮件。其他一些人有编辑'也可以访问电子表格。我想知道是否有任何办法让我阻止那些人编辑'从修改我的脚本和从帐户发送胭脂电子邮件访问?

我探讨了以下选项:

  1. 在个人工作表上创建库并阅读其他人正在访问的代码。这只隐藏了其他人的代码,但是他们仍然可以写一封电子邮件,因为脚本区域已经有了写电子邮件的权限。
  2. 创建我正在调查的附加组件。
  3. 下面您可以看到我的脚本示例,该脚本是在电子表格内编辑时触发的。

    
    
    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单元格时从我的帐户发送电子邮件。但我想控制从我的邮箱发送的内容。目前,任何可以编辑工作表的人都可以编辑从邮箱发送的电子邮件,这是我不喜欢的。

    我是否可以限制用户,以便他们无法通过利用我最初提供的电子邮件权限来编辑帐户中的电子邮件内容。

    编辑:235325 为了清楚起见,我并不担心代码的正常运行。我只是想要一种保护脚本的方法,以便有人在编辑'电子表格的权限不应该能够编辑我的脚本以发送他/她想要的任何电子邮件。

2 个答案:

答案 0 :(得分:3)

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

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

这样,您就是运行脚本的唯一用户来发送电子邮件。当脚本未绑定时,它始终以您的身份运行,并且无法由没有编辑权限的人打开。但是,您需要创建一个监视工作表的触发器。 From the Google Apps docs

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

然后,为了确保没有人弄乱您的电子邮件,您可以使用Session.getActiveUser()中的一条路线中的一条路线。

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

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

方法二 - 验证尝试运行该功能的用户。

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

关于该方法的

Here's the Google Documentation

答案 1 :(得分:0)

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

  1. 创建独立脚本以接收电子邮件参数数据并发送代表您的帐户运行的电子邮件,并且只会与您共享。
  2. 使用{b}脚本中的UrlFetchApp通过GETPOST发送数据。
  3. 通过这种方式,您可以控制代码和电子邮件内容。