为什么 webapp 以我的身份执行,任何人访问都显示 effectiveUser 和 activeUser 是编辑者,而不是所有者?

Why webapp to execute as me, accessed by anyone shows effectiveUser and activeUser being the editor, not the owner?

所以,我有一些绑定到电子表格的功能,这些功能可以对受编辑保护的范围进行修改。当编辑点击电子表格上的按钮时,函数将是 运行。这些函数还从其他文件中获取数据,编辑者无法访问这些文件。 因此,根据下面的评论,它必须由我部署为 web app、运行 并由任何人访问。

我的理解是里面一定有一个doGet()函数,要调用web app url。但是,我不知道在哪里添加这个 doGet() 函数,如下所示。

现有功能示例:

file: globals.gs,这是将电子表格之外的数据导入文件的地方

const CAD_PRODUTO = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const config = {
  get ssBDCadProd() {
    delete this.ssBDCadProd;
    return (this.ssBDCadProd = SpreadsheetApp.openById(CAD_PRODUTO));
  }
const sheetBDCadProd = config.ssBDCadProd.getSheetByName('CadProduto');

电子表格中的函数,它根据外部文件中的数据创建一个新数字:

function gerarRef() {
  try {
    const response = Browser.msgBox('Do you want to create a new record?', Browser.Buttons.YES_NO);
    if (response == 'no') {
      return;
    } else {
      let ref = 0;
      const refExistentes = sheetBDCadProd.getRange(2, 1, sheetBDCadProd.getLastRow(), 1).getValues(); //Calls other file
      let ultRef = Math.max(...refExistentes);
      Logger.log('Ult.: ' + ultRef)
      if (ultRef == 0 || ultRef == '') {
        ref = 10000;
      } else {
        ref += ultRef + 1;
      }
      const refRng = sheetCadProd.getRange('B5').setValue(ref);
      refRng.offset(0, 2).activate();
    }
  } catch (err) {
    Browser.msgBox('Ocorreu um erro: ' + err);
  }
}

除了上面的功能,我还有很多。 我该如何应用 web app 方法?

万分感谢!

像“运行 as me”和“By Anyone”这样的 Web 应用程序部署设置仅对 doGetdoPost 函数有效,并且仅当它们通过 HTTP 调用时请求(当使用网络应用程序调用它们时 URL)。

如果您通过插入绘图并为其分配函数来设置电子表格上的按钮,则网络应用程序部署设置不会对直接调用 Google Apps 脚本服务的函数产生任何影响类似于 SpreadsheetApp,但如果该函数使用 UrlFetchApp 服务向您的 Web 应用程序发出 HTTP 请求,则可能会起作用。

这是一个过度简化的 Google Apps 脚本服务器端代码 (.gs),用于调用网络应用程序:

function callMyWebApp(){
  const url = 'put here your web app URL';
  const response = UrlFetchApp.fetch(url); // This will do a GET request
  // do something with the response
}

一种更简单的方法可能是使用可安装的触发器,因为它不需要处理另一个“复杂层”,因为它不需要向您的项目 (UrlFetchApp) 添加其他服务,因此没有必要部署 web-app 并在每次更新代码时创建一个新版本,但如果您希望将编辑授权的范围保持在最低限度,则必须使用网络应用程序方法。

相关