Google Drive API v3(Java)を使用して、
Driveに置かれているファイルのパーミッションを付与・更新・削除する方法
についてご紹介します。
APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Google Drive API v3] JavaでDrive APIを使う
を参照ください。
| No | 目次 | |
|---|---|---|
| 1 | パーミッションの付与タイプと役割(ロール) | |
| 1 | アクセス権の付与タイプ | |
| 2 | 役割(ロール) | |
| 2 | パーミッションを付与 | |
| 1 | スコープ | |
| 2 | 実行 | |
| 3 | レスポンスの内容 | |
| 3 | パーミッションを更新 | |
| 1 | スコープ | |
| 2 | 実行 | |
| 3 | レスポンスの内容 | |
| 4 | パーミッションを削除 | |
| 1 | スコープ | |
| 2 | 実行 | |
| 3 | レスポンスの内容 |
1. パーミッションの付与タイプと役割(ロール)
1.1. アクセス権の付与タイプ
| タイプ | 内容 |
|---|---|
| user | 単一のユーザーにアクセス許可を付与 |
| group | グループにアクセス許可を付与 |
| domain | ドメインにアクセス許可を付与 |
| anyone | 会社ドメインへのアクセス権を持つ人物にアクセス許可を付与 |
1.2. 役割(ロール)
| 許可された操作 | owner | organizer | fileOrganizer | writer | commenter | reader |
|---|---|---|---|---|---|---|
| ファイルまたはフォルダーのメタデータ (名前、説明など) を読み取ります。 | o | o | o | o | o | o |
| ファイルの内容を読む | o | o | o | o | o | o |
| フォルダー内のアイテムのリストを読む | o | o | o | o | o | o |
| ファイルにコメントを追加する | o | o | o | o | o | x |
| ファイルまたはフォルダーのメタデータを変更する | o | o | o | o | x | x |
| ファイルの内容を変更する | o | o | o | o | x | x |
| 過去のリビジョンにアクセスする | o | o | o | o | x | x |
| フォルダーにアイテムを追加する | o | o | o | o | x | x |
| 「マイドライブ」フォルダからアイテムを削除する | o | x | x | o | x | x |
| 「マイドライブ」フォルダーのアイテムを共有する | o | x | x | o | x | x |
| 共有ドライブアイテムを共有する | x | o | o | o | x | x |
| 共有ドライブにファイルを追加する | x | o | o | o | x | x |
| 共有ドライブのメタデータを変更する | x | o | x | x | x | x |
| 共有ドライブのメンバーを追加する | x | o | x | x | x | x |
| 詳細なファイル権限にアクセスできます | o | o | o | o | x | x |
| 共有ドライブ内のアイテムを再編成する | x | o | o | x | x | x |
| アイテムを共有ドライブの外に移動する | x | o | x | x | x | x |
| アイテムをゴミ箱に移動する | o | o | o | x | x | x |
| ゴミ箱からアイテムを回収する | o | o | o | x | x | x |
| ゴミ箱を空にする | o | o | x | x | x | x |
| ファイルまたはフォルダーを削除する | o | o | x | x | x | x |
| 共有ドライブ内のアイテムを削除する | x | o | x | x | x | x |
| 空の共有ドライブを削除する | x | o | x | x | x | x |
| マイドライブフォルダー内のファイルにコンテンツ制限を追加する | o | x | x | o | x | x |
| 共有ドライブ内のファイルにコンテンツ制限を追加する | x | o | o | o | x | x |
2. パーミッションを付与
2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
DriveScopes.DRIVE
DriveScopes.DRIVE_FILE
⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)
でスコープを指定してください。
2.2. 実行
APIを実行します。
パーミッションを付与したいファイルに、
・メールアドレス
・アクセス権の付与タイプ
・役割(ロール)
を設定します。
そのほかの設定は、2.2.3. リクエストボディを参照ください。
setFieldsでレンスポンスで取得したいフィールド(Permission)を指定できます。
指定しない場合は、必要最小限のレスポンスしか返ってきません。
ここでは「*」(全て取得)を指定しています。
public static void main(String[] args) throws Exception{
Drive drive = getDrive();
Drive.Permissions permissions = drive.permissions();
Permission permission = new Permission();
permission.setEmailAddress("xxxxx@gmail.com");
permission.setType("user");
permission.setRole("reader");
Drive.Permissions.Create create = permissions.create("ファイルID", permission);
create.setEmailMessage("権限を付与しました");
create.setFields("*");
Permission res = create.execute();
System.out.println(res);
}
2.2.1. HTTPリクエスト
POST: https://www.googleapis.com/drive/v3/files/{ファイルID}/permissions
が実行されます。
2.2.2. クエリパラメータ
Drive.Permissions.Createのsetメソッドにより、クエリパラメータを追加できます。
| メソッド | 引数 | 説明 |
|---|---|---|
| setEmailMessage | String | 通知メールに含めるプレーン テキストのカスタムメッセージ |
| setMoveToNewOwnersRoot | Boolean | 親を変更するか アイテムが共有ドライブになくリクエストがアイテムの所有権を譲渡しようとしている場合のみ |
| setSendNotificationEmail | Boolean | ユーザーまたはグループに共有するときに通知メールを送信するかどうか デフォルトはture |
| setSupportsAllDrives | Boolean | 要求元のアプリケーションがマイドライブと共有ドライブの両方をサポートしているか |
| setTransferOwnership | Boolean | 所有権を指定したユーザーに譲渡し、現在の所有者をライターにダウングレードするか |
| setUseDomainAdminAccess | Boolean | ドメイン管理者としてリクエストを発行するか |
2.2.3. リクエストボディ
Permissionのsetメソッドにより、リクエストボディを設定できます。
| メソッド | 引数 | 説明 |
|---|---|---|
| setType | String | アクセス権の付与タイプ |
| setEmailAddress | String | このパーミッションが参照するユーザーまたはグループの電子メールアドレス |
| setRole | String | このパーミッションによって付与される役割 |
| setAllowFileDiscovery | Boolean | 検索によるファイルの検出を許可するパーミッションかどうか。 typeがdomain、anyoneの場合のみ |
| setDomain | String | このパーミッションが参照するドメイン |
| setExpirationTime | DateTime | このパーミッションが期限切れになる時刻 typeがuser、groupの場合のみ |
| setPendingOwner | Boolean | このパーミッションに関連付けられたアカウントが保留中の所有者であるか typeがuserで、共有ドライブにないファイルのタイプのパーミッションのみ |
DateTime
| メソッド | 引数 | 説明 |
|---|---|---|
| setValue | long | unixミリ秒 |
| setTimeZoneShift | int | UTCからの分数で表されるタイムゾーン |
2.3. レスポンスの内容
Permission
| フィールド | メソッド | 戻り値 | 説明 |
|---|---|---|---|
| id | getId | String | パーミッションID |
| type | getType | String | 被付与者のタイプ |
| displayName | getDisplayName | String | パーミッション名 |
| kind | getKind | String | リソースの識別名 固定文字列:"drive#permission" |
| permissionDetails | getPermissionDetails | List<Permission.PermissionDetails> | アクセス許可の継承についての詳細 共有ドライブのみ |
| photoLink | getPhotoLink | String | ユーザーのプロフィール写真へのリンク |
| emailAddress | getEmailAddress | String | 参照するユーザーまたはグループの電子メールアドレス |
| role | getRole | String | 付与される役割 |
| allowFileDiscovery | getAllowFileDiscovery | Boolean | 検索によるファイルの検出を許可するパーミッションか typeがanyoneの場合のみ |
| domain | getDomain | String | パーミッションが参照するドメイン |
| expirationTime | getExpirationTime | String | 期限切れになる時刻 |
| deleted | getDeleted | Boolean | 関連付けられたアカウントが削除されているか typeがuser、groupの場合のみ |
| view | getView | String | パーミッションのビュー(publishedのみ) |
| pendingOwner | getPendingOwner | Boolean | 関連付けられたアカウントが保留中の所有者であるか |
Permission.PermissionDetails
| メソッド | 戻り値 | 説明 |
|---|---|---|
| getPermissionType | String | パーミッションのタイプ file、member |
| getInheritedFrom | String | 継承元となるアイテムのID |
| getRole | String | 主な役割 |
| getInherited | Boolean | パーミッションが継承されるかどうか |
3. パーミッションを更新
3.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
DriveScopes.DRIVE
DriveScopes.DRIVE_FILE
⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)
でスコープを指定してください。
3.2. 実行
APIを実行します。
変更したいファイルのファイルIDとパーミッションIDを指定します。
public static void main(String[] args) throws Exception{
Drive drive = getDrive();
Drive.Permissions permissions = drive.permissions();
permission.setEmailAddress("xxxx@gmail.com");
permission.setType("user");
permission.setRole("reader");
Drive.Permissions.Update update = permissions.update("ファイルID", "パーミッションID", permission);
Permission res = update.execute();
System.out.println(res);
}
3.2.1. HTTPリクエスト
PATCH: https://www.googleapis.com/drive/v3/files/{ファイルID}/permissions/{パーミッションID}
が実行されます。
3.2.2. クエリパラメータ
Drive.Permissions.Getのsetメソッドにより、クエリパラメータを追加できます。
| メソッド | 引数 | 説明 |
|---|---|---|
| setRemoveExpiration | Boolean | 有効期限を削除するか |
| setSupportsAllDrives | Boolean | 要求元のアプリケーションがマイドライブと共有ドライブの両方をサポートしているか |
| setTransferOwnership | Boolean | 所有権を指定したユーザーに譲渡し、現在の所有者をライターにダウングレードするか |
| setUseDomainAdminAccess | Boolean | ドメイン管理者としてリクエストを発行するか |
3.2.3. リクエストボディ
Permissionのsetメソッドにより、リクエストボディを設定できます。
2.2.3. リクエストボディと同じです。
3.3. レスポンスの内容
Permission
2.3. レスポンスの内容と同じです。
4. パーミッションを削除
4.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
DriveScopes.DRIVE
DriveScopes.DRIVE_FILE
⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)
でスコープを指定してください。
4.2. 実行
APIを実行します。
削除したいパーミッションのファイルIDとパーミッションIDを指定します。
public static void main(String[] args) throws Exception{
Drive drive = getDrive();
Drive.Permissions permissions = drive.permissions();
Drive.Permissions.Delete delete = permissions.delete("ファイルID", "パーミッションID");
delete.execute();
}
4.2.1. HTTPリクエスト
DELETE: https://www.googleapis.com/drive/v3/files/{ファイルID}/permissions/{パーミッションID}
が実行されます。
4.2.2. クエリパラメータ
Drive.Permissions.Deleteのsetメソッドにより、クエリパラメータを追加できます。
| メソッド | 引数 | 説明 |
|---|---|---|
| setSupportsAllDrives | Boolean | 要求元のアプリケーションがマイドライブと共有ドライブの両方をサポートしているか |
| setUseDomainAdminAccess | Boolean | ドメイン管理者としてリクエストを発行するか |
4.3. レスポンスの内容
成功した場合は何も返しません。
失敗した場合は例外を出力します。
おしまい。。