簡體   English   中英

Google雲端硬盤API / SDK,使用服務帳戶更改所有者失敗

[英]Google Drive API / SDK, change owner using service account fails

我嘗試以編程方式使用Google Drive API v2更新Google Drive中某些文件的所有者權限。帳戶以創建憑據和“ DriveService”對象。 我可以列出與我共享的所有文件,並枚舉“文件”的“所有者”集合。 向文件(role =“ writer”)添加新權限可以正常工作。 如果我嘗試將新的權限更改為role =“ owner”,則會收到內部錯誤500。

有人以前見過該錯誤,我該如何解決?

這是我的代碼:

// ---------------------- BUILD CREDENTIALS -------------------------------
Google.Apis.Auth.OAuth2.ServiceAccountCredential m_Creds = new ServiceAccountCredential(
                new ServiceAccountCredential.Initializer(<MY_SERVICE_ACCOUNT>)
                    {
                        Scopes = new[]
                                     {
                                         DriveService.Scope.Drive,
                                         DriveService.Scope.DriveFile,
                                         DriveService.Scope.DriveAppdata
                                     }
                        ,
                        User = <MY_ADMIN_ACCOUNT>
                    }.FromCertificate(certificate));

// ---------------------- BUILD CLIENTINIT -------------------------------
var myCInit = new BaseClientService.Initializer
            {
                ApplicationName = "Testapplication",
                HttpClientInitializer = m_Creds
            };

string myAccountname = "Test User1"; // accountname to look for
string myNewAccountEmail = "Test.User2@mydomain.com"; // email of new owner account

// ---------------------- DRIVE SERVIVE CREATION -------------------------------
var myDService = new DriveService(myCInit);

// ----------------------- GET THE FILE LIST------------------------------------ 
var myFList = myDService.Files.List().Execute();

         foreach (Google.Apis.Drive.v2.Data.File currF in myFList.Items)
            {

             foreach (Google.Apis.Drive.v2.Data.User currUser in currF.Owners)
                {
                    if (currUser.DisplayName.StartsWith(myAccountname))
                    {
                        // create new permission for new owner
                        Permission p = new Permission();
                        p.Role = "writer";
                        p.Type = "user";
                        p.Value = myNewAccountEmail;
                        myDService.Permissions.Insert(p, currF.Id).Execute(); // works fine, creates new permission

                        // get permission id 
                        var myNewID = myDService.Permissions.GetIdForEmail(myNewAccountEmail).Execute();

                        // get my newly created permission
                        p = myDService.Permissions.Get(currF.Id, myNewID.Id).Execute();
                        p.Role = "owner";

                        // create update request                            
                        var myUpdR = myDService.Permissions.Update(p, currF.Id,myNewID.Id);
                        myUpdR.TransferOwnership = true; // yes, we want to be an owner

                        myUpdR.Execute();  // this call gets an "internal error 500"
                    }
                }
            }

任何幫助表示贊賞。

謝謝。 TL

您只能在域內更改所有者。

問題在於,您首先必須與將所有權更改為另一用戶的域位於同一域中。 這是出於安全方面的考慮。

另一個是更改文件,它必須指向目標(文件夾ID),而我發現最好的工作方式是目標用戶與源用戶共享一個文件夾。 然后,它可以處理文件的更改權限。

我按以下順序進行操作以實現這一點:

  1. 使用admin-user上載文件,並將其指向目標用戶已共享的folderId。

  2. InsertPermission(fileId,user.email,“ user”,“ owner”)

  3. RemoveOwnPermission,通過發送管理員用戶電子郵件並將其刪除到文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM