通过“谷歌文档列表API”的作家加入到电子表格(Add an writer to a spreads

2019-06-24 09:36发布

我书面方式在谷歌APS(GAS)的脚本,我需要一个用户(/作家)(域管理员)添加到另一个用户的spreadsheed。

该脚本运行/下管理员privilegies调用。

首先,我用“谷歌Apps的管理权限冒充域的用户”,我得到他的证件(电子表格)的名单,我得到的文件的ID。

VAR的OAuthConfig = UrlFetchApp.addOAuthService( “文档”); oauthConfig.setAccessTokenUrl( “https://www.google.com/accounts/OAuthGetAccessToken”); oauthConfig.setRequestTokenUrl(“https://www.google.com/accounts/OAuthGetRequestToken?(...)

这部分工作正常,并得到想要的ID的。

现在,我要添加到自己(administrator@example.com)这个文件

我想这样的:

var optAdvancedArgs = {
"contentType": "application/atom+xml",
"method": "POST",
"headers": {  "GData-Version": "3.0" }, 
              "oAuthServiceName": "docs", 
              "oAuthUseToken": "always",
           };

VAR url_set = “https://docs.google.com/feeds/” +用户+ “/私人/充满/文件:” + matriu2 [0] [6] + '/acl/user:administrator@example.com'

VAR结果= UrlFetchApp.fetch(url_set,optAdvancedArgs);

“用户” 是文件的拥有者,活动用户(Session.getActiveUser()。getUserLoginId())和 “matriu2 [nm]的[6]” 为文档的ID。

这不工作,

有任何想法吗 ?

塞尔吉

Answer 1:

花一个小时的时间后,这里是我得到了这个功能将共享文件给自己(域管理员)。 你可以改变其他参数在XML中有读,写等权限

function shareDocumentToMe(){
  var base = 'https://docs.google.com/feeds/';
  var fetchArgs = googleOAuth_('docs', base);
  var writerID = Session.getEffectiveUser().getEmail();
  fetchArgs.method = 'POST';
  var rawXml = "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gAcl='http://schemas.google.com/acl/2007'>"
      +"<category scheme='http://schemas.google.com/g/2005#kind' "
      +"term='http://schemas.google.com/acl/2007#accessRule'/>"
      +"<gAcl:role value='writer'/>"
      +"<gAcl:scope type='user' value='"+writerID+"'/>"
      +"</entry>";
  fetchArgs.payload = rawXml;
  fetchArgs.contentType = 'application/atom+xml';
  var url = base + 'user@yourdomain.com/private/full/'+yourDocumentID+'/acl?v=3&alt=json';
  var content = UrlFetchApp.fetch(url, fetchArgs).getContentText();
  Logger.log(content);
}

//Google oAuth
function googleOAuth_(name,scope) {
  var oAuthConfig = UrlFetchApp.addOAuthService(name);
  oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
  oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oAuthConfig.setConsumerKey("anonymous");
  oAuthConfig.setConsumerSecret("anonymous");
  return {oAuthServiceName:name, oAuthUseToken:"always"};
}

我已经posetd在我的谷歌网站相同的代码。 你可以在这里看看。 https://sites.google.com/site/appsscripttutorial/urlfetch-and-oauth



Answer 2:

我永远也不会发现这一点。 非常感谢你。

我修改了以下(VAR URL = ...):

'user@yourdomain.com/private/full/'

通过
user + '/private/full/'

哪里

user = Session.getActiveUser (). getUserLoginId ()

而且在googleOAuth_我把我的域值:

oAuthConfig.setConsumerKey ("mydomain.com");

oAuthConfig.setConsumerSecret ("xXxXxXxXxXxXxXxXx");

它完美的作品!

我认为这是非常有趣的是,域的管理员可以代表用户的行为(一旦我们获得许可)与一些组织的文件,但已经由用户创建的。

此外用户资源(文档,电子表格,......),以便程序可以访问(使用管理员权限运行),而无需关注(或者你没有足够的专业知识)的用户,如安全的副本,...

就我而言,我做出评估谷歌文档形式的方案已经由用户(教师)一样通过与谷歌Apps脚本谷歌网站(GAS)编程的小工具“Flubaroo”,但在图形环境(GUI)创建。

感谢你的宝贵时间。

塞尔吉



文章来源: Add an writer to a spreadsheet via “Google Document List API”