用户拥有“我的云端硬盘”文件夹。该文件夹可能包含多个用户,这些用户有权访问不同的文件。这种限制性访问模式意味着,不同用户在同一文件夹中看到的项目列表可能不同。如果用户有权访问父级“我的云端硬盘”文件夹,但无权访问该文件夹中的某个内容,则该用户具有“受限访问权限”。这会导致难以确定层次结构中哪些人拥有访问权限。
反之,共享云端硬盘文件归共享云端硬盘所有。共享云端硬盘采用的是扩展模型,因此每个用户在同一文件夹中看到的项目列表都相同。
访问权限受限的文件夹的推出,将共享云端硬盘的广泛访问权限模式复制到了“我的云端硬盘”。在此变更后,受限访问权限的文件夹成为唯一例外情况,允许在“我的云端硬盘”和共享云端硬盘中限制对特定子文件夹的访问权限。
本指南介绍了如何在 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() 方法访问文件夹元数据。如需确认访问权限是否受限,请检查响应正文,看看相应项是否为 MIME 类型为 application/vnd.google-apps.folder 的文件夹,以及 capabilities.canListChildren 字段是否设置为 false。如果您尝试列出此类文件夹的子项,结果始终为空。
访问访问权限受限的文件夹的元数据
如果您无权访问文件夹内容,则可以查看访问权限受限的文件夹的元数据。
使用 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 Drive 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 字段。
此外,如果您的应用已在文件夹中创建了受限访问权限,您可以按以下步骤操作:
遍历文件夹层次结构以移除受限访问权限。您应改为设置受限的文件夹访问权限。
如果您要取消共享的项目是文件,可以创建一个中间文件夹,设置有限的访问权限,然后将该文件移至新文件夹中。
如果您不想使用访问权限受限的文件夹,但必须移除某些访问权限,则可以将文件移至私密文件夹(例如“我的云端硬盘”根文件夹)。然后,您可以创建指向相应项目原始位置的快捷方式,以便用户仍能使用该项目。