存储在用户Google Drive
中的文件的典型用例是能够有选择地为某些其他用户授予访问权限,例如为了允许第三方读取或修改他们最初无权访问的文件。
当涉及到service account
时,显然无法访问“根”级文件,因此所有要共享的文件都必须放在一个文件夹中,该文件夹通过电子邮件地址共享service account
中的一个。
即使对于共享文件夹中的文件,Java SDK
似乎也不允许在没有先与该用户共享文件的情况下更改用户的角色(这违背了使用SDK的目的)。
例如,以下代码不适用于具有特定fileId
的任何文件和具有userEmail
地址的第三方用户(非共享):
Persmission permission = new Permission()
.setType("user")
.setRole("writer")
.setEmailAddress(userEmail);
driveService
.permissions()
.create(fileId, permission)
.setFields("*")
.execute();
返回的错误是Google Drive
的{{3}}中描述的错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "appNotAuthorizedToFile",
"message": "The user has not granted the app {appId} {verb} access to the file {fileId}."
}
],
"code": 403,
"message": "The user has not granted the app {appId} {verb} access to the file {fileId}."
}
}
在这种情况下,{verb}
是"write"
。
上面使用的service account
包含在Authorized API clients
门户网站Manage API client access
页面的Google Admin
部分的https://www.googleapis.com/auth/drive
部分中,范围尽可能广泛,即使用
{{1}}