2015-09-01 2 views
1

Я использую Google Drive API в скрипте Google Apps (который представляет собой изолированный Javascript с песочницей, который не может использовать API-интерфейс Google для Javascript).API для Google Диска - Изменение владельца файла - Ошибка разрешений 400 «Требуется поле типа разрешений»

Я являюсь супер администратором Google Apps и аутентифицирую как пользователь, использующий делегирование домена и учетную запись службы, чтобы олицетворять пользователей, и я могу успешно совершать звонки Files:get в качестве других пользователей в домене.

Теперь я пытаюсь передать право собственности на файл с пользователем А пользователю В, что делает пользователя C редактор, выполнив следующие действия:

  1. Когда проверку подлинности как пользователя А, передача права собственности на файл от пользователя A до пользователя B, установив пользователя B в качестве дополнительного владельца.

  2. Когда проверку подлинности как пользователя А или В, сделать пользовательский C редактор файла

Я уже завершен этап 1 успешно.

Для шага 1 я предполагаю, что для добавления пользователя B в качестве владельца, независимо от того, являются ли они уже предоставленными в файле, используется Permissions:insert. Я написал это:

var url = 'https://www.googleapis.com/drive/v2/files/' + fileId + '/permissions'; 

var resource = { 
    "type": "user", 
    "role": "owner", 
    "value": "userBEmail" 
}; 

var requestBody = {}; 
requestBody.method = 'POST'; 
requestBody.headers = { Authorization: 'Bearer ' + service.getAccessToken() }; 
requestBody.contentType = 'application/json'; 
requestBody.resource = JSON.stringify(resource); 
requestBody.muteHttpExceptions = true; 

try { 

    var response = UrlFetchApp.fetch(url, requestBody); 

    var result = JSON.parse(response.getContentText()); 

    Logger.log('result: ' + JSON.stringify(result, null, 2)); 

} catch(e) { 

    Logger.log(e.message); 

} 

Результат таков:

{ 
    "error": { 
    "errors": [ 
     { 
     "domain": "global", 
     "reason": "required", 
     "message": "Permission type field required", 
     "locationType": "other", 
     "location": "permission.type" 
     } 
    ], 
    "code": 400, 
    "message": "Permission type field required" 
    } 
} 

Мои вопросы:

  1. Является ли это правильный способ выполнения передачи файла от одного пользователя к другому?

  2. Почему он говорит "Permission type field required", если я включил это?

  3. После я получаю шаг 1 работает, есть ли способ, чтобы добавить шаг 2 в тот же API вызова (по соображениям производительности, потому что я планирую запустить это в цикле через до 1000 файлов)

Также стоит упомянуть: я смог успешно передать право собственности на файл с помощью проводника API в нижней части this page из моей учетной записи в другую учетную запись. Я предоставил точный идентификатор файла и содержимое тела запроса.

ответ

1

Выяснил это.

Я использовал UrlFetchApp.getRequest(), чтобы увидеть запрос, который был отправлен, и увидел, что он отправил объект под названием payload, который был пустым.

Изменен .resource до .payload и запрос был успешным.

Смежные вопросы