2

我在更新 Google 文档的 Acl 时遇到问题。我想与一些用户共享文档,但只允许 COMMENTER 权限。这是代码:AclEntry newAclEntry = getDservice().insert(new URL(aclFeedUrl), new AclScope(AclScope.Type.USER, "user1@domain.com"), AclRole.COMMENTER);

现在 Eclipse 告诉我 AclRole.COMMENTER 是一个有效类型,但是当我运行代码时,我得到以下异常:服务异常:发布的条目对字段具有无效值:角色

如果我将其更改为 AclRole.READER 它工作正常。

所以我想我会做一些调查。您可以通过“共享”从 Google Doc 设置 COMMENTER 访问权限。所以我这样做了,然后通过以下方式阅读了文档的 ACL:

AclFeed feed = getDservice().getFeed(new URL(doc.getAclFeedLink().getHref()),AclFeed.class);

        if (feed == null) 
            System.out.println("Feed is null");
        else {

            for (AclEntry a: feed.getEntries()) {
                System.out.println("acl role:" + a.getRole().getValue());
                System.out.println("acl scope:" + a.getScope().getValue());
            }
        }

具有 COMMENTER 访问权限的 user1 和具有 READER 访问权限的 user2 的输出是:

acl 角色:读者 acl 范围:user1@domain.com

acl 角色:读者 acl 范围:user2@domain.com

因此,即使 user1 明确是 COMMENTER,它也会被报告为“读者”

如果我访问 AclRole 的在线文档,则没有 COMMENTER 枚举 (https://developers.google.com/gdata/javadoc/com/google/gdata/data/acl/AclRole)。

那么,如何为仅评论权限设置 ACL?显然,Google Docs 支持它,并且 Eclipse 正在从我正在使用的 GData jar 中获取它。

我错过了什么?

4

1 回答 1

1

这里缺少的是检查additionalRoleACL 条目的字段。用户是读者评论者。查看来自 Documents List API 的原始 XML 响应:

<entry gd:etag='W/&quot;D0UFQH4_eCt7ImAe9WhJREEk.&quot;'>
  <id>https://docs.google.com/feeds/id/user%3Aa%40b.com</id>
  <updated>2012-07-11T22:20:11.040Z</updated>
  <app:edited xmlns:app='http://www.w3.org/2007/app'>2012-07-11T22:20:11.040Z</app:edited>
  <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/acl/2007#accessRule'/>
  <title>Document Permission - a@b.com</title>
  <link rel='self' type='application/atom+xml' href='https://docs.google.com/feeds/default/private/expandAcl/document%3A1lD_aQPqe33JI4mObm2zc7FADUH-ypXcGekwAovPY2OpMw/acl/user%3Aa%40b.com'/>
  <link rel='edit' type='application/atom+xml' href='https://docs.google.com/feeds/default/private/expandAcl/document%3A1lD_aQPqe33JI4mObm2zc7FADUH-ypXcGekwAovPY2OpMw/acl/user%3Aa%40b.com'/>
  <gAcl:role xmlns:gAcl='http://schemas.google.com/acl/2007' value='reader'/>
  <gAcl:scope xmlns:gAcl='http://schemas.google.com/acl/2007' type='user' value='a@b.com' name='Anderson Jones'/>
  <gAcl:additionalRole xmlns:gAcl='http://schemas.google.com/acl/2007' value='commenter'/>
</entry>

注意 的gAcl:additionalRole值为commenter

试试这个代码来创建一个评论者条目:

AclEntry aclEntry = new AclEntry();
aclEntry.setScope(new AclScope("user", "user1@domain.com"));
aclEntry.setRole(AclRole.READER);
aclEntry.addAdditionalRole(AdditionalRole.COMMENTER);

要确定一个条目是否有commenter additionalRole,请执行以下操作:

if (aclEntry.getAdditionalRoles().contains(AdditionalRole.COMMENTER)) {
  // Do something knowing this user is a commenter
}

但是,您确实应该升级到Drive API v2,这会更容易。以下代码示例适用于 Drive API:

Permission permission = new Permission();
permission.setType("user");
permission.setValue("user1@domain.com");
permission.setRole("reader");
permission.setAdditionalRoles(Arrays.asList("commenter"));

感谢Alain Vongsouvanh提供了部分答案!

于 2012-07-11T22:37:05.083 回答