Google App Engine(以下GAE)からGoogleDocsのSpreadSheetを操作することになりましたので、権限周りについて少し調べてみました。
結論として、Google Data APIを使えば、ひと通りは手作業と同じようにSpreadSheetの操作はできるようです。
検証結果を簡単にまとめてみましたので、どうぞご参考までに読んでください。
<検証結果>
・使用したAPI : Google Documents List Data API version3.0
検証内容 | Google Data API | 手作業 |
オーナー権限の移譲 | ○ | ○ |
既存ユーザーの権限の変更 | ○ | ○ |
Spreadsheetへのユーザーの追加 | ○ | ○ |
既存ユーザーの削除 | ○ | ○ |
1:オーナー権限の委譲 & Spreadsheetへのユーザーの追加
DocsServiceクラスのInsertメソッド、もしくはAclEntryクラスのUpdateメソッドを使用します。
オーナー権限を変更した場合、前オーナーは自動で編集権限に変更になり、新オーナーに権限を委譲したことを知らせるメールが送られます。
コード例
// Scopeに新オーナーのメールアドレスと、タイプをSetします。
aclEntry.setScope(new AclScope(AclScope.Type.USER, "newOwner@addres.co.jp"));
// 追加する権限にオーナーを指定します。
aclEntry.setRole(new AclRole("owner"));
// entryオブジェクトは権限を追加するドキュメントのDocumentListEntryクラスです。
docsService.insert(new URL(entry.getAclFeedLink().getHref()), aclEntry);
2:既存ユーザーの権限の変更
DocsServiceクラスのInsertメソッド、もしくはAclEntryクラスのUpdateメソッドを使用します。
コード例
aclEntry.setRole(new AclRole("reader"));
AclEntry resulAclEntry = aclEntry.update();
// docsService.update(new URL(entry.getAclFeedLink().getHref()), aclEntry);
既存ユーザの削除
DocsServiceクラスのDeleteメソッド、もしくはAclEntryクラスのDeleteメソッドを使用します。
コード例
aclEntry.delete();
// docsService.delete(new URL(entry.getAclFeedLink().getHref()), aclEntry);
Goog Data APIのページで探していたときに「Google Spreadsheets Data API」が目に入りましたが、こちらはどうやらSpreadsheetの内容を編集する時に使うようです。名前に騙されました。
Google Documents List Data API では権限の変更以外にもSpreadsheetの新規作成も行えるので、GAEからGoogle Docsを操作する際には活躍すると思います。