Как обновить права доступа к файлам на Google Диске с помощью REST API?

Я попытался обновить разрешение на доступ к файлу на Google Диске, т.е. попытался дать новую роль. Но это исключение. Вот пример кода.

Permission content = new Permission();
permission.setRole("Reader");
permission.setType("user");
permission.setEmailAddress("[email protected]");
driveService.permissions().update(fileId, permissionId, permission).queue(batch, callback);

Для этого примера кода я получил исключение Json следующим образом

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "fieldNotWritable",
    "message": "The resource body includes fields which are not directly writable."
   }
  ],
  "code": 403,
  "message": "The resource body includes fields which are not directly writable."
 }
}

Может кто-нибудь помочь мне, как это решить?


person Venkat    schedule 27.04.2016    source источник
comment
Как это возможно в Java Drive REST API V3?   -  person Venkat    schedule 27.04.2016


Ответы (2)


Я сделал ошибку, т.е. добавил адрес электронной почты пользователя и также ввел запрос, кроме новой роли пользователя. Но эти два поля нельзя переопределить в Drive REST API v3. Так что я получил исключение. Исправленный образец кода выглядит следующим образом:

Permission content = new Permission();
content.setId(id_of_the_file);
content.setRole("Reader");
driveService.permissions().update(fileId, permissionId, permission).setFields("role").execute();
person Venkat    schedule 02.05.2016

Я думаю, вам нужно сначала получить разрешение от API. Вам не хватает этой строки:

Разрешение разрешения = service.permissions().get(fileId, разрешениеId).execute();

как:

public class MyClass {

// ...

/**
* Update a permission's role.
*
* @param service Drive API service instance.
* @param fileId ID of the file to update permission for.
* @param permissionId ID of the permission to update.
* @param newRole The value "owner", "writer" or "reader".
* @return The updated permission if successful, {@code null} otherwise.
*/
private static Permission updatePermission(Drive service, String fileId,
String permissionId, String newRole) {

    try {
        // First retrieve the permission from the API.
        Permission permission = service.permissions().get(fileId, permissionId).execute();

        permission.setRole(newRole);

        return service.permissions().update(fileId, permissionId, permission).execute();

    } catch (IOException e) {
        System.out.println("An error occurred: " + e);
    }

    return null;

}

// ...

}

Дополнительные сведения см. в документах здесь.

person noogui    schedule 27.04.2016
comment
Это отлично работает в Drive REST API V2, но не в V3. Есть ли альтернатива обновлению разрешений в V3? - person Venkat; 02.05.2016