用户拥有“我的云端硬盘”文件夹。该文件夹可能包含多个有权访问不同文件的用户。这种限制性访问模式意味着,不同用户在同一文件夹中看到的内容列表可能会有所不同。如果用户有权访问“我的云端硬盘”父级文件夹,但无权访问该文件夹中的某个内容,则该用户的访问权限为“受限”。这导致很难确定在层次结构中谁拥有访问权限。
反之,共享云端硬盘文件归共享云端硬盘所有。共享云端硬盘采用的是广泛的模型,因此每个用户在同一文件夹中看到的内容列表都是相同的。
引入访问权限受限的文件夹后,您可以将共享云端硬盘中的广泛访问权限模型复制到“我的云端硬盘”中。此次变更后,受限访问权限的文件夹是唯一允许在“我的云端硬盘”和共享云端硬盘中限制对特定子文件夹的访问权限的例外情况。
本指南介绍了如何在 Google 云端硬盘中管理访问权限受限的文件夹和访问权限广泛的文件夹。
访问权限受限的文件夹简介
借助访问权限受限的文件夹,您可以将文件夹的访问权限限制为特定用户。 只有您直接添加到文件夹权限中的用户才能打开该文件夹并访问其内容。对共享的“我的云端硬盘”文件夹或共享云端硬盘文件夹拥有继承权限(通过父级文件夹获得的权限)的用户可以在云端硬盘中看到受限文件夹,但无法打开该文件夹。此功能可更好地统一“我的云端硬盘”和共享云端硬盘中内容的共享行为,让您可以将包含敏感内容的文件夹与更广泛共享的内容一起整理。
“我的云端硬盘”和共享云端硬盘中都有受限访问权限的文件夹。“我的云端硬盘”中的 owner
角色和共享云端硬盘中的 organizer
角色始终可以访问访问权限受限的文件夹。如需修改文件夹用户列表,无需任何特殊权限。可以共享文件夹的角色可以更新成员列表。如需详细了解角色和权限,请参阅角色和权限以及共享云端硬盘概览。
请注意,虽然文件夹是一种文件,但文件不支持受限访问权限。
为文件夹设置有限访问权限
虽然拥有直接文件夹权限的用户可以访问具有访问权限受限的文件夹,但只有“我的云端硬盘”中的 owner
角色和共享云端硬盘中的 organizer
角色才能启用或停用访问权限受限设置。
此外,如果在“我的云端硬盘”中具有 writer
角色的用户将 files
资源的 writersCanShare
布尔值字段设为了 true
,则该用户也可以开启或关闭此功能。
如需限制对文件夹的访问权限,请将 files
资源上的布尔值 inheritedPermissionsDisabled
字段设置为 true
。如果为 true
,则只有 owner
角色、organizer
角色以及具有直接文件夹权限的用户可以访问该文件夹。
如需重新启用继承的权限,请将 inheritedPermissionsDisabled
设置为 false
。
验证是否有权限制对文件夹的访问权限
如需检查您是否可以限制对文件夹的访问权限,请检查 files
资源的 capabilities.canDisableInheritedPermissions
和 capabilities.canEnableInheritedPermissions
字段的布尔值。这些设置用于确认您是否有权通过 inheritedPermissionsDisabled
字段限制对文件夹的访问权限。
如需详细了解 capabilities
,请参阅了解文件功能。
列出访问权限受限的文件夹的子文件夹
如需检查您是否可以列出文件夹的子文件夹,请使用 capabilities.canListChildren
布尔值字段。
如果内容不是文件夹,或者通过将 inheritedPermissionsDisabled
设置为 false
移除了请求者对文件夹内容的访问权限,则返回的值始终为 false
。
如果您对文件夹内容的访问权限被移除,您仍然可以使用 files.get()
和 files.list()
方法访问文件夹metadata。如需确认访问权限受限,请检查响应正文,看看相应项是否为 MIME 类型为 application/vnd.google-apps.folder
且 capabilities.canListChildren
字段设为 false 的文件夹。如果您尝试列出此类文件夹的子文件夹,结果始终为空。
访问访问权限受限的文件夹元数据
借助访问权限受限的文件夹,即使您无权访问文件夹内容,也可以查看文件夹metadata。
使用 permissions
资源确定用户的访问权限时,仅授予对元数据访问权限的“我的云端硬盘”和共享云端硬盘文件夹在响应正文中都包含以下值:inheritedPermissionsDisabled=true
和 view=metadata
。该角色始终设置为 reader
。系统仅会为属于 view
的权限填充 view
字段。如需了解详情,请参阅视图。
permissionDetails
字段中的所有条目都将 inherited
字段设置为 true
,以表示权限是继承的,并且未授予对文件夹内容的直接访问权限。
如需同时授予对文件夹内容和元数据的访问权限,请将 inheritedPermissionsDisabled
字段设置为 false
,或将角色更新为 reader
或更高级别。
最后,如果先通过关闭文件夹的继承 (inheritedPermissionsDisabled=true
) 来限制权限,然后直接将权限重新添加到文件夹,则响应正文中的值会变为 inheritedPermissionsDisabled=true
,并且 view
字段会设为未设置。如果文件夹位于共享云端硬盘中,则 permissionDetails
列表中有一个条目的 inherited
字段设置为 false
,表示该权限未继承。与任何其他权限一样,此权限可授予对文件夹内容和元数据的访问权限。
删除访问权限受限的文件夹
您可以对 files
资源使用 files.delete()
方法删除访问权限受限的文件夹。
在“我的云端硬盘”中,只有内容的所有者才能删除文件夹层次结构。 如果用户删除的层次结构中包含访问权限受限且归他人所有的文件夹,这些文件夹会移至所有者的“我的云端硬盘”。
如果用户具有 owner
角色,则系统会删除整个层次结构。
在共享云端硬盘中,organizer
角色可以删除层次结构,即使其中包含访问权限受限的文件夹也是如此。如果 fileOrganizer
角色删除包含访问权限受限文件夹的层次结构,结果取决于他们是否已作为 fileOrganizer
重新添加到访问权限受限文件夹。如果存在,则整个层次结构都会被删除。如果没有,则访问权限受限的文件夹会移至共享云端硬盘的根文件夹。
关于“广泛访问”
引入访问权限受限的文件夹后,我们将共享云端硬盘的广泛访问权限模型扩展到了“我的云端硬盘”。该访问权限模型发布后,拥有对某个文件夹的访问权限意味着至少对该文件夹层次结构中的所有内容拥有相同级别的访问权限。受限访问权限的文件夹是唯一的例外情况,您可以通过它在“我的云端硬盘”和共享云端硬盘中限制对特定子文件夹的访问权限。这也意味着,除非您的文件夹的访问权限受到限制,否则您将无法再移除从父级文件夹继承的访问权限。这样做会导致 Drive API 返回错误响应。如需在层次结构中定义更精细的访问权限控制,您可以为文件夹设置有限访问权限。
适应广泛的访问权限
为了让开发者更轻松地适应更广泛的访问权限,我们对 Google 云端硬盘 API 进行了多项改进:
现在,系统会为“我的云端硬盘”中的内容填充
permissions
资源的permissionDetails[]
字段。以前,这些字段会被取消设置,或者根据需要从teamDrivePermissionDetails
字段复制。系统只会填充“我的云端硬盘”中的permissionType
和inherited
字段。permissionDetails[].inherited
字段用于指明权限是从项的父级继承的。借助该方法,您可以检测是否从父级继承了某些角色(例如reader
),以及是否直接向项目授予更高级别的角色(例如writer
)。查看某项的权限时,
permissionDetails[]
字段可能会包含多个条目。如果存在,则该范围的项上会有一个直接权限条目,然后是该项上的继承权限或成员权限条目。开发者可以在未来强制执行之前,选择在我的云端硬盘中启用扩展的访问权限 API 行为。您可以将
enforceExpansiveAccess
请求参数设置为true
,以便日后对“广泛访问权限”所做的更改不会影响您的应用。现在,选择启用该功能意味着,该 API 对“我的云端硬盘”中的内容的运作方式与对共享云端硬盘中的内容的运作方式相同。例如,调用
permissions.update()
时,任何尝试限制继承的角色下访问权限的操作都会失败。同样,如果权限被继承,对permissions.delete()
的调用将失败。
检测和防范受限访问
当您的应用使用 permissions.update()
或 permissions.delete()
方法时,可能会为您的“我的云端硬盘”文件夹创建受限访问权限(即用户有权访问父级“我的云端硬盘”文件夹,但无权访问该文件夹中的文件)。
使用这些方法时,您可以查看 permissions
资源上的字段,了解请求可能会在哪些位置创建受限访问权限,并避免发送此类请求。如需检测这种情况,请在请求中使用 enforceExpansiveAccess
字段。
此外,如果您的应用已对文件夹创建了受限访问权限,您可以执行以下步骤:
遍历文件夹层次结构以移除受限访问权限。您应改为设置受限文件夹访问权限。
如果您尝试取消共享的项目是文件,则可以创建一个中间文件夹,为其设置访问权限受限,然后将文件移至新文件夹中。
如果您不想使用访问权限受限的文件夹,但必须移除部分访问权限,可以将文件移至私有文件夹(例如“我的云端硬盘”根文件夹)。然后,您可以创建指向相应内容原始位置的快捷方式,以便用户仍可使用该内容。