我可以让部分 Google Apps 脚本代码以我的身份执行,而其余部分以访问用户的身份执行吗?

2024-04-26

我有一个应用程序脚本 Web 应用程序,可以写入融合表,以及定期缓存的一些电子表格。我不想向同事提供对融合表的编辑访问权限,他们可以根据自己的需要编辑条目。

目前,Web 应用程序以用户身份执行,适用于我组织内的任何人,这就是目的。但是,我希望 Web 应用程序像我自己一样执行任何查询,这样我就不需要向可能访问它的每个用户显式提供权限。

有没有办法做到这一点?


是的,这是可能的。以前,您将使用 OAuth2 库,将凭据保存到脚本属性存储,然后使用 REST 接口访问您想要使用自己的凭据访问的服务。现在您可以使用执行 API 来使用内置服务。

Setup

  1. 将 OAuth2 库添加到您的项目中:
    https://github.com/gsuitedevs/apps-script-oauth2 https://github.com/gsuitedevs/apps-script-oauth2

  2. 根据 README.md 进行设置,与您的项目范围相匹配(查看项目属性)。确保将 setPropertyStore() 指向脚本属性。

  3. 验证您的 OAuth2 服务。

  4. 将您的脚本发布为执行 API

  5. 添加对脚本 REST 接口的调用。查看令牌方法,确保更改它以匹配您自己的方法。

    function ExecuteAsMe(functionName,paramsArray){
      var url = 'https://script.googleapis.com/v1/scripts/'+ScriptApp.getProjectKey()+':run';
    
      var payload = JSON.stringify({"function": functionName ,"parameters":paramsArray, "devMode": true});
    
      var params={method:"POST",
                  headers:{Authorization: "Bearer "+ getFusionService().getAccessToken()},
                  payload:payload,
                  contentType:"application/json",
                  muteHttpExceptions:true};
      var results = UrlFetchApp.fetch(url, params);
     return JSON.parse(results).response.result;
    }
  1. 按照以下方式执行该函数:var results = ExecuteAsMe("searchFusionTable",['searchTerm', 50]);

参考:

执行API
https://developers.google.com/apps-script/guides/rest/api?hl=en https://developers.google.com/apps-script/guides/rest/api?hl=en

OAuth2 库

https://github.com/gsuitedevs/apps-script-oauth2 https://github.com/gsuitedevs/apps-script-oauth2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以让部分 Google Apps 脚本代码以我的身份执行,而其余部分以访问用户的身份执行吗? 的相关文章

  • 通过 Google 表格中的应用程序脚本访问并恢复到特定(最好是命名)修订

    我没有找到使用 Drive Rest Revisions 方法与 Google Sheet 的 命名 版本进行交互的方法 或者将特定修订移至头部 我正在尝试弄清楚如何在编辑器进行编辑并完成后将命名修订移至头部 在完成触发后 我希望脚本 除其
  • 谷歌电子表格中的数据绑定?

    是否可以编写一个将两个单元 绑定 在一起的谷歌应用脚 本 例如 如果编辑一张工作表中的单元格 它将自动更新另一张工作表中的匹配单元格 因此 如果sheet1在单元格A1中有一个表示 花费的钱 的值 并且sheet2在单元格B4中有一个表示相
  • 在创建命名文件夹之前检查其是否存在

    我正在尝试将 Google Drive 中的特定文件插入到文件夹中 我还想检查是否有一个具有名称的文件夹 testFolder 如果是 则将文件插入到已存在的文件夹中 否则创建一个名为 testFolder 这是我到目前为止所想到的 但它总
  • 如何使用 google-apps-script 以 Google 表单导入“文件上传”模块

    I am able to create a small google form using google apps script Which includes texts radio buttons etc But how to inclu
  • 电子表格的授权范围

    我创建了一个独立的 Google Apps 脚本 它不属于任何文档 该脚本会以固定的时间间隔自动触发 这个脚本 创建几个文件夹 如果它们不存在 创建一个 Google 电子表格 如果不存在 读过说 电子表格 更新日历事件 我注意到 当我第一
  • 如何检查 GAS 中是否存在文件(通过 id)

    我知道有关如何检查文件是否存在的问答by name using hasnext 不过我需要检查一下按文件 ID 最好没有高级 Drive API 披露 我写了一个基于错误处理的解决方案 function ifFileExists id tr
  • Google Apps onEdit 事件 - event.source 未定义

    Google 文档允许编写脚本 当单元格内容与特定单词匹配时 我试图更改单元格的颜色 我的问题是 onEdit 函数没有按照此处指定的方式工作 https developers google com apps script guide ev
  • 如何从电子表格加载特定工作表

    我有一个包含很多工作表的电子表格 我需要加载其中一张工作表 我该怎么做 Here is a photo of the sheets in my Spreadsheet 这是我的想法如何做到这一点 var sheet SpreadsheetA
  • 寻找使用库版本的方法?

    我正在通过库在多个电子表格上部署脚本 但正如您所知 脚本 目前 还无法知道它是否正在运行最新版本 我试图通过为我的代码创建自己的版本控制来找到解决此问题的方法 我有一个 Web 服务返回我的库代码的最新版本号 以便我可以对其进行比较 但 o
  • 您无权执行该操作

    我有一个时间触发的脚本 可以定期从外部源检索内容并用它更新 Google 网站页面 根据this https developers google com apps script guides triggers installable res
  • 在提交 Google 表单时找不到具有给定 ID 的项目

    我创建了一个在 Google 表单上运行 onSubmit 的脚本 它应该获取上传到表单的图像的 ID 获取 Blob 形式的图像 然后将其转发到某个电子邮件地址 问题是 有时 大约十分之一 脚本会给出以下错误 例外 找不到具有给定 ID
  • 使用文件名将文件一个文件夹复制到 Google 云端硬盘中的另一个文件夹

    我的谷歌云端硬盘帐户中有两个文件夹 文件夹 1 和 文件夹 2 文件夹1 内有多个文件 假设有一个文件名Test txt我想复制Test txt使用 Driveapp 将文件保存到 文件夹 2 我找到了代码 但它仅适用于 文件唯一 ID 我
  • 是否可以将 .gs 文件上传到复制的 Google 文档的应用程序脚本项目?

    我复制了一个电子表格供多人使用 并附加了脚本 我的问题是如何修改项目中的脚本 而不必将每个更改复制并粘贴到 gs项目中的文件 This is the base document from which the other versions w
  • 触发器根据其创建维护激活序列并在每次运行时保护电子表格数据

    我正在向我的 Web 应用程序发送 5 个请求 import requests backodds 3 00 layteam Flamengo layodds 1 50 advantage 25 55 webAppsUrl https scr
  • Google Apps 脚本:在电子邮件中发送 PDF 而不是 .zip 文件

    我有这段代码 可以从 Google 电子表格生成 PDF 文件并将其作为电子邮件附件发送 问题是它压缩文件const zipBlob Utilities zip blobs setName ss getName zip 我想更改它 以便附加
  • 如何使用 Google Sheets onEdit() 触发器运行函数来更新 Google Form

    我有一个 Google 表格工作簿 其中有一个工作表 我想用它来保存工作簿和 Google 表单的设置 我做了一个定制onEdit 触发两个函数的函数 一个用于更新工作簿 另一个用于更新表单 function onEdit e var ra
  • 如何使用 OnChange() 触发器

    我有一个电子表格以及该电子表格的主副本 每次用户将数据输入单元格时 它都会获取新数据并放入主副本中 然而最近 我注意到一个用户创建了一个新列 该列未被 OnEdit 捕获 于是我查了一下 看到了去年实现的OnChange 但是 我不知道如何
  • 如何在多个工作表上运行脚本,Google Sheets

    我有一个脚本 想在 Google 工作表中的特定选项卡上运行 但不一定在所有选项卡上运行 我尝试执行两个不同名称的脚本 但只有最后一个保存的脚本会运行 如何编写此脚本以在特定选项卡上运行 这是我的开始脚本 function onEdit v
  • 根据单元格值隐藏列

    在我的谷歌电子表格 A 中 我使用 TRANSPOSE 和 IMPORTRANGE 公式的组合从日历电子表格 B 导入数据 以便填写事件的工作时间表 因为每个日期都有 3 个事件空位 但这些空位并不总是被填满 所以我收到了很多过时的列 表格
  • BigQuery REGEXP_MATCH 和重音:边界通配符失败?

    在 GAS 中 我可以正确地将重音符号与具有边界字符的正则表达式相匹配 例如 b b 仅当字符 是单独的单词时才匹配 这在 GAS 中有效 function test regExp var str la s ance est Paris v

随机推荐