google-apps-script - 如何获取 Google Team Drive 的管理者/贡献者/等?

标签 google-apps-script google-drive-api google-drive-shared-drive

Team Drive 有五个权限级别:

  • 经理
  • 内容经理
  • 贡献者
  • 评论者
  • 查看者

Folder API另一方面,只有三个函数用于获取文件夹中人员的用户列表:

  • getEditors()
  • getOwner()
  • getViewers()

如果您使用的是“我的云端硬盘”,则效果很好,因为它具有完全相同的三个级别:

  • 是所有者
  • 可以组织、添加和编辑
  • 只能查看

如何获取 Google 团队云端硬盘中的 5 个访问级别?如果我确实调用这 3 个函数,它们在团队云端硬盘上对应哪个访问级别? (例如,getEditors 是否返回 Manager 组中的每个人?)

我看到有一个 Permission具有我正在寻找的确切 5 个权限的枚举:

  • 查看
  • 编辑
  • 评论
  • 所有者
  • 组织者

...我可以打电话 getAccess()获取给定用户电子邮件的访问级别。问题是我不知道将哪些电子邮件传递给该函数。

如何获取 5 个类别中任意类别的人员列表(例如内容管理员)?或者我如何获取团队云端硬盘上所有人员的列表(例如,这样我就知道要与 getAccess() 使用哪些电子邮件)?

最佳答案

以下是团队云端硬盘 UI 中给出的权限、相应的 getAccess() 值以及您可以调用的包含该人员的文件夹 API 方法之间映射的摘要:

+-----------------------+-------------+-------------------+
| Team Drive Permission | getAccess() | Folder API Method |
+-----------------------+-------------+-------------------+
| Manager               | ORGANIZER   | (None)            |
| Content Manager       | NONE        | (None)            |
| Contributor           | EDIT        | getEditors()      |
| Commenter             | COMMENT     | getViewers()      |
| Viewer                | VIEW        | getViewers()      |
| (None)                | NONE        | (None)            |
+-----------------------+-------------+-------------------+

一些结果:

  • 无法知道谁是团队云端硬盘上的内容管理员:请注意它如何为两个内容管理员返回 NONE以及不在团队云端硬盘中的人员。因此,即使您知道该人的电子邮件地址,也无法使用 getAccess() 方法知道谁是团队云端硬盘上的内容管理员。这可能是 API 中的错误?
  • 您可以轻松获取所有贡献者:只需调用 getEditors() 方法即可。
  • 您可以获取所有评论者和查看者,但也需要使用 getAccess():因为评论者和查看者都是通过 getViewers 返回的,您需要将其与 getAccess() 返回的结果进行交叉引用,以找到实际的评论者或查看者。
  • 没有 API 方法可以获取管理员或内容管理员:返回文件夹上的一组用户的标准 API 方法都不会返回管理员或内容管理员组中的任何人。因此,您需要知道经理的电子邮件地址,并且只能使用 getAccess() 来验证他们确实是经理。
  • getOwner() 始终返回 null。这大概是因为团队云端硬盘上没有单一所有者。即使您正好有 1 个管理器和 0 个内容管理器,它也会返回 null

因此,似乎没有办法在团队云端硬盘上找到OWNERORGANIZER(大概是经理内容管理员,分别)使用标准 API。相反,您必须已经知道与用户关联的电子邮件地址是什么,并调用 getAccess()。这是不幸的。

我期望以下解决方法能够发挥作用:

  • 在团队云端硬盘中创建一个虚拟文件。由于团队云端硬盘中的文件权限正好映射到编辑评论查看,因此 getEditors( ) 方法现在应该公开管理器和内容管理器。由于它们具有文件的编辑权限,因此它们应该由 getEditors() 方法返回。

不幸的是,这也不起作用。结果与文件夹情况完全相同。 Manager 和 Content Manager 被隐藏(即 3 个方法都没有返回它们)。内容管理器的 getAccess() 仍然是 NONE,等等。


要获取管理者和内容管理者的列表,我相信唯一的选择是使用高级 API。特别是,它看起来像 Permissions 上的 teamDrivePermissionDetails[].role对象准确返回映射到团队云端硬盘权限的 5 个状态:

  • organizer
  • fileOrganizer
  • writer
  • commenter
  • reader

关于google-apps-script - 如何获取 Google Team Drive 的管理者/贡献者/等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54189752/

相关文章:

google-apps-script - 将图像从驱动器添加到工作表

java - Google 云端硬盘复制、团队云端硬盘(服务)到我的云端硬盘(用户)

google-apps-script - GAS 不允许在 Team Drive 中以实用方式创建可安装触发器

google-apps-script - 如何导入多个 csv 文件(格式相同)并在 Google 电子表格中自动创建图表?

javascript - 如何在 WEB google App Script 上生成 "id"?

javascript - 如何使用 Javascript 获取多个选定项的列表并将它们的值输出为数组

java - 以编程方式将 Android 设备上 SD 卡上的本地文件夹与 Google Drive 同步

python - 如何在 Google Drive API v3 中获取文件的 'lastModified'?

javascript - 在 IE 上使用 "Access Data Sources Accross Domains"下载 Google Drive 驱动器文件

google-api - Google 云端硬盘文件删除错误。用户对此文件没有足够的权限