我可以授权某人使用谷歌脚本中的菜单

时间:2017-10-05 23:56:02

标签: google-apps-script spreadsheet

我只是在电子表格中创建一个菜单,我想添加一个可以使用此菜单的用户列表。我只是想知道我是否可以使用addEditors(emailAddress)或其他一些方法来实现这一目的? 这是我写的代码

function onOpen() {

  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Menu')
      .addItem('Add new row', 'addNewRow')  //Add "Add row" function to Custom menu
      .addItem('Delete last row', 'deleteLastRow') //Add "Generate invoice" function to Custom menu
      .addToUi();
}

目前我想授予一些像“me@gst.org.us”和“you@gst.org.us”这样的用户使用这种方法,其他人不能。

请问我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

不要仅仅通过编写脚本就可以做到这一点。尝试开发Apps Script Add-ons for Sheets, Docs, Slides and Forms。然后,检查Add-on Authorization LifecyclePublishing Add-ons for Domain-Wide Installation了解访问和授权。

您还可以检查Apps Script web apps,因为它有可以访问它的选项。

答案 1 :(得分:0)

我认为最好的选择是将此检查添加到addNewRow()deleteLastRow()

if (checkUser()) {
    //Add or delete row
}
else return;

checkUser函数如下所示:

function checkUser() {
    var okUsers = ["me@gst.org.us","you@gst.org.us"];
    var user = Session.getActiveUser().getEmail();
    for (var u in okUsers) if (user == okUsers[u]) return true;
    SpreadsheetApp.getUi().alert("Your email is not authorized to use this function.");
    return false;
}

如果尝试使用该函数的人不在您的okUsers数组中,则checkUser()的计算结果为false,并且将警告用户他们未被授权。我想你也可以通过使用:

来摆脱for循环
if (okUsers.includes(user)) return true;

但我之前没有尝试使用Array.includes()方法和Google脚本,所以不确定是否支持。 我也没有机会测试这段代码,但它应该可行。如果您遇到任何问题,请告诉我。