2

Google ドキュメントの ACL の更新に問題があります。ドキュメントを一部のユーザーと共有したいのですが、COMMENTER 権限のみを許可します。コードは次のとおりです。

Eclipse は AclRole.COMMENTER が有効なタイプであることを教えてくれますが、コードを実行すると次の例外が発生します: Service Exception: The posted entry has an invalid value for the field(s): role

これを AclRole.READER に変更すると、正常に動作します。

ということで、ちょっと調べてみようと思いました。「共有」を介して Google ドキュメントからの 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

ここで欠けているのはadditionalRole、ACL エントリのフィールドをチェックすることです。ユーザーは読者であり、コメンターでもあります。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 に答える