0

试图通过获取文件的权限、循环访问文件并检索具有“所有者”角色的权限的用户信息(特别是电子邮件地址)来查找文件的所有者。

PermissionList filePermissions = service.permissions().list(fileID).execute();

for (Permission permission : filePermissions) {

    if (permission.getRole().toLowerCase().equals("owner")) {
        String fileOwner = permission.getEmailAddress();
    }

}

“permission.getEmailAddress()”一直返回null,所以我决定在每个权限上调用“toPrettyString()”,这表明权限对象只包含“id”、“种类”、“角色”和“类型” ”,但绝不是“电子邮件地址”。

Drive API的Google 文档将“emailAddress”列为权限对象的属性之一,所以我对为什么无法检索它感到困惑。

我认为这可能与用于获取驱动器服务的用户凭据有关,但即使使用文件所有者的凭据仍然会产生相同的结果。

4

3 回答 3

1

如果您用于运行程序的用户帐户与文件所有者位于不同的 GSuite (Google Apps) 域中,那么您将无权访问他们的电子邮件地址。您的选择是:

  1. 使用 displayName 而不是电子邮件地址。
  2. 使用同一 GSuite 域中的 Google 帐户运行您的程序
  3. 使用委派权限运行您的程序,以便能够模拟 GSuite 域的用户(请参阅此处标题为“将域范围内的权限委派给服务帐户”的部分
于 2016-10-28T01:01:46.987 回答
1

Google Drive REST APIs v3 只会返回某些默认字段。如果您需要某个字段,则必须通过使用方法设置它来明确请求它.setFields()

像这样修改你的代码 -

PermissionList filePermissions = service.permissions().list(fileID).setFields('permissions(emailAddress,id,kind,role,type)').execute();

您可以在此处阅读有关此行为的更多信息https://developers.google.com/drive/v3/web/migration

从上面的链接引用 -

显着变化

  • 默认情况下不再返回完整资源。使用 fields 查询参数请求返回特定的字段。如果未指定,则仅返回常用字段的子集。

如果它对您有用,请接受答案,以便其他面临此问题的人也可以从中受益。

于 2016-10-28T18:07:03.273 回答
0

Drive API Permission 资源有四种类型。

  • user
  • group
  • domain
  • anyone

emailAddress字段仅在类型为userorgroup且该domain字段仅存在于 type时出现domain

还要确保您emailAddress使用 fields 查询参数明确要求该字段。

于 2016-10-30T20:15:18.750 回答