[英]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),而我發現最好的工作方式是目標用戶與源用戶共享一個文件夾。 然后,它可以處理文件的更改權限。
我按以下順序進行操作以實現這一點:
使用admin-user上載文件,並將其指向目標用戶已共享的folderId。
InsertPermission(fileId,user.email,“ user”,“ owner”)
RemoveOwnPermission,通過發送管理員用戶電子郵件並將其刪除到文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.