我正在尝试将文件的所有权转让给超级管理员。代码的基本部分如下所示。如果我转移我拥有的文档的所有权,则相同的代码有效。但在这种情况下,原始所有者是同一域中的另一个用户。 [编辑] 我知道在管理面板中有一个“从1个用户转移到另一个用户的文件”,但是对于多个所有者的多个文件/文件夹的情况需要这样做需要以编程方式进行转移。 [/ EDIT]
所以简单的场景是:
然而它总是在行update.execute();
中抛出(500 OK)异常(最后显示)。
即使是超级管理员,这项操作也不可能吗?
感谢您的任何提示!
try {
Drive service = getDriveService();
Permission newPerm = new Permission();
newPerm.setValue("admin@domain.com");
newPerm.setType("user");
newPerm.setRole("writer");
newPerm = service.permissions().insert(fileId, newPerm).execute();
newPerm.setRole("owner");
Update update = service.permissions().update(fileId, newPerm.getId(), newPerm);
update.setTransferOwnership(true);
update.execute();
} catch (IOException e) {
e.printStackTrace();
log.severe(e.getMessage());
}
抛出的异常如下:
SEVERE: 500 OK
{
"code" : 500,
"errors" : [ {
"domain" : "global",
"message" : "Internal Error",
"reason" : "internalError"
} ],
"message" : "Internal Error"
}
答案 0 :(得分:1)
我终于至少部分工作了。感谢@ZigMandel的“假冒”提示!现在我仔细地遵循了这个Domain-wide Delegation of Authority。并使用了使用“服务帐户”-key创建的GoogleCredential
。有了这个凭据,我可以模拟Drive API操作,例如添加权限和将所有权转移给Admin。
仍然存在的问题是,使用当前的Drive API,无法以编程方式确定所有者电子邮件地址,这是模拟凭据创建所必需的。现在我需要找到一个解决方法。无论如何,基本思想现在起作用。谢谢!
答案 1 :(得分:0)
您无法通过应用脚本执行此操作。 可以从appengine完成。我已经完成了它,但超出了这里解释的范围。涉及代表文件所有者使用驱动器api并在域级别添加oauth权限。