2016-04-27 3 views
0

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

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." 
} 
} 

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

+0

Как это возможно в Java REST API V3? – Venkat

ответ

0

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

Разрешение на разрешение = service.permissions(). Get ( fileId, permissionId) .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; 

} 

// ... 

} 

Более подробная информация в документации here.

+0

Это отлично работает в драйвере REST API V2, но не в V3. Есть ли альтернатива разрешениям на обновление в V3? – Venkat

1

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

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