我可以将部分Google Apps脚本代码作为我执行,而其余代码作为访问用户执行吗?

时间:2016-01-31 21:24:31

标签: google-apps-script google-fusion-tables

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

目前,对于组织内的任何人来说,Web应用程序都是以用户身份执行的。但是,我宁愿网络应用程序像我一样执行任何查询,因此我不需要为可能正在访问它的每个用户明确提供权限。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:1)

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

设置

1)将OAuth2库添加到您的项目中:
https://github.com/googlesamples/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;
}

5)执行以下功能:var results = ExecuteAsMe("searchFusionTable",['searchTerm', 50]);

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

OAuth2图书馆
https://github.com/googlesamples/apps-script-oauth2