我尝试以编程方式使用google drive api v2更新google驱动器中某些文件的所有者权限。(例如Google管理控制台执行"驱动器/转让所有权"表单) 我创建了一个服务帐户,并使用其ID和超级管理员帐户来创建凭据和" 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"
}
}
}
感谢任何帮助。
THX。 TL
答案 0 :(得分:0)
您只能在域内更改所有者。
答案 1 :(得分:0)
问题是您首先必须在将所有权更改为其他用户的域中。这是出于安全方面的原因。
另一个是更改文件,它必须指向目标(文件夹ID),并且我发现工作的最佳方式是目标用户共享文件夹到源用户。然后它可以使用文件的更改权限进行处理。
我按照这个顺序做到了这一点:
使用admin-user上传文件并将其指向目标用户共享的folderId。
InsertPermission(fileId,user.email,“user”,“owner”)
RemoveOwnPermission,发送admin-user电子邮件并将其删除。