1

我正在用 Google Aps (GAS) 编写脚本,我需要将用户(/writer)(域管理员)添加到另一个用户的电子表格中。

该脚本正在管理员权限下运行/调用。

首先,我使用“Google Apps 管理访问权限来模拟域的用户”,我得到了他的文档列表(电子表格),我得到了文档的 ID。

var oauthConfig = UrlFetchApp.addOAuthService("docs"); 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/" + 用户 + "/private/full/document:" + matriu2[0][6] + '/acl/user:administrator@example.com'

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

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

这行不通,

有任何想法吗 ?

塞尔吉

4

2 回答 2

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"};
}

我在我的 Google 网站上设置了相同的代码。你可以看看这里。 https://sites.google.com/site/appsscripttutorial/urlfetch-and-oauth

于 2012-05-13T07:37:03.570 回答
0

我永远不会发现这个。非常感谢你。

我修改了以下内容(var url = ...):

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

经过
user + '/private/full/'

在哪里

user = Session.getActiveUser (). getUserLoginId ()

而且在googleOAuth_我把我的域值​​​​:

oAuthConfig.setConsumerKey ("mydomain.com");

oAuthConfig.setConsumerSecret ("xXxXxXxXxXxXxXxXx");

而且效果很好!

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

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

就我而言,我编写了一个程序来评估用户(教师)创建的 Google Docs 表单,就像小工具“Flubaroo”一样,但在由 Google 协作平台使用 Google Apps Script (GAS) 编程的图形环境 (GUI) 中.

感谢你的宝贵时间。

塞尔吉

于 2012-05-13T11:04:52.197 回答