google drive api v3 (python) обновить роль прав доступа к файлу

Я пытаюсь создать приложение на Python 3.7, в котором будут перечислены все файлы в учетной записи диска и установлены частные общедоступные файлы. Я использую google drive api v3. Для этого мне нужно изменить "тип" прав доступа к файлу на "пользователь", это не сработало, и теперь я сначала пытаюсь поставить "роль" прав доступа к файлу на "владелец", потому что в общедоступных файлах он показывает "читатель" или "писатель".

Я много чего пробовал, и все работает.

Вот код (он на испанском, потому что это мой язык. Функция, которая не работает, называется «ActualizarPermisos»)

    def actualizarPermisos(service, file_id, permission_id):

        try:
        # First retrieve the permission from the API.
            permission = service.permissions().get(
                fileId=file_id, permissionId=permission_id).execute()
            permission['role'] = 'writer'
            return service.permissions().update(
            fileId=file_id, permissionId=permission_id, body=permission, transferOwnership=False).execute()
        except errors.HttpError as error:
            print ('An error occurred: %s' % error)
            return None

Отображаемая ошибка: «Произошла ошибка: https://www.googleapis.com/drive/v3/files/0B4SorsEEhamLfmVuQUtFUXpMS25RT2k2SkpOTzFhclRubk1VM3ZDUkw5b3o0Zm5kRWpHWjQ/transfermissions/anyone, который не возвращается напрямую, а поле ресурса не возвращается». . ">"


person Julian Strah    schedule 28.06.2019    source источник


Ответы (1)


Проблема с вашим кодом заключается в том, что вы используете тело разрешения, которое вы получаете из метода get, в котором есть поля id, kind и type. Эти поля нельзя изменять при обновлении разрешения, можно изменять только поля expirationTime и role, как вы можете проверить здесь [1].

Вы можете просто создать разрешение json следующим образом:

permission = {'role': 'writer'}

И используйте его вместо тела разрешения, которое вы получаете из запроса на получение. Я протестировал это таким образом и успешно работал, обновляя разрешение пользователя от читателя к писателю.

Если вам нужно изменить больше полей, чем разрешено, я предлагаю вам удалить разрешение (сначала получив необходимые данные) и создать новое разрешение для этого файла [2], здесь вы можете проверить допустимые значения для каждого поля [3 ].

[1] https://developers.google.com/drive/api/v3/reference/permissions/update

[2] https://developers.google.com/resources/api-libraries/documentation/drive/v3/python/latest/drive_v3.permissions.html#create

[3] https://developers.google.com/drive/api/v3/reference/permissions

person Andres Duarte    schedule 01.07.2019