Почему я не могу обновить разрешение на доступ к владельцу? (Google.Apis.Drive.v3) - PullRequest
0 голосов
/ 21 октября 2019

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

Я прочитал официальный документ, в котором говорится, что поле "роль" доступно для записи.
https://developers.google.com/drive/api/v2/reference/permissions/update

Куда мне нужно внести исправления?

Моя версия API - Google ApisДиск v3

Вот пример кода, который я скопировал у разработчиков Google

 try
        {
            // First retrieve the permission from the API.
            Permission permission = service.Permissions.Get(fileId, permissionId).Execute();
            permission.Role = newRole;
            return service.Permissions.Update(permission, fileId, permissionId).Execute();
        }
        catch (Exception e)
        {
            Console.WriteLine("An error occurred: " + e.Message);
        }

        return null;

После Execute () я получил это сообщение об ошибке.

Google.Apis.Requests.RequestError Тело ресурса содержит поля, которые не доступны для прямой записи. [403] Ошибки [Сообщение [Тело ресурса включает в себя поля, которые не доступны для прямой записи.] Местоположение [-] Причина [fieldNotWritable] Домен [global]]


(обновление)

Я изменил свой код с помощью

public Permission ModifyPermission(DriveService service, string fileId, string permissionId, string newRole)
    {
        try
        {
            if (String.IsNullOrEmpty(newRole)) return null;

            var permission = new Permission
            {
                Role = newRole
            };

            var request = service.Permissions.Update(permission, fileId, permissionId);

            if(newRole == "owner") request.TransferOwnership = true;

            return request.Execute();
        }
        catch (Exception e)
        {
            Console.WriteLine("An error occurred: " + e.Message);
        }

        return null;
    }

Затем выдается еще одно исключение.

Google.Apis.Requests.RequestError У пользователя недостаточно прав для этого файла. [403] Ошибки [Сообщение [У пользователя недостаточно прав для этого файла.] Местоположение [-] Причина [достаточное количество_процессов] Домен [глобальный]]


Файл был загружен службойучетные данные в формате JSON. И я обновляю разрешение так же, как и полномочия на загрузку.

Чего мне не хватает?

1 Ответ

0 голосов
/ 22 октября 2019

Предоставляемый вами объект разрешений имеет больше свойств, чем указано в параметрах привода.

Например, заполнены свойства Вид и Тип при получении разрешения с использованием метода get.

При использовании метода обновления допускаются только следующие свойства разрешения: expirationTime , role .

См .: Разрешения: обновление , раздел Тело запроса .

Вы можете попробовать это:

try
{
    var permission = new Permission
    {
        Role = newRole
    };
    return service.Permissions.Update(permission, fileId, permissionId).Execute();
}
catch (Exception e)
{
    Console.WriteLine("An error occurred: " + e.Message);
}

return null;
...