Administra carpetas con acceso limitado y amplio

Un usuario es propietario de una carpeta de Mi unidad. La carpeta puede contener varios usuarios con acceso a diferentes archivos. Este modelo de acceso restrictivo significa que diferentes usuarios podrían ver diferentes listas de elementos dentro de la misma carpeta. Un usuario con acceso a la carpeta superior de Mi unidad, pero no a un elemento dentro de esa carpeta, tiene "acceso restringido". Esto crea una situación en la que es difícil saber quién tiene acceso dentro de la jerarquía.

Por el contrario, los archivos de unidades compartidas son propiedad de la unidad compartida. Las unidades compartidas tienen un modelo expansivo, por lo que cada usuario tiene la misma lista de elementos dentro de la misma carpeta.

La introducción de carpetas con acceso limitado replica el modelo de acceso expansivo de las unidades compartidas a Mi unidad. Con este cambio, las carpetas con acceso limitado son la única excepción que permite restringir el acceso a una subcarpeta específica en Mi unidad y en las unidades compartidas.

En esta guía, se explica cómo puedes administrar carpetas con acceso limitado y acceso expansivo en Google Drive.

Acerca de las carpetas con acceso limitado

Restringe carpetas a usuarios específicos.

Las carpetas con acceso limitado te permiten restringir carpetas a usuarios específicos. Solo los usuarios que agregues directamente a los permisos de la carpeta pueden abrirla y acceder a su contenido. Los usuarios con acceso heredado a la carpeta compartida de Mi unidad o a la carpeta de la unidad compartida (a través del acceso desde una carpeta superior) pueden ver la carpeta restringida en Drive, pero no abrirla. Esta función alinea mejor el comportamiento de uso compartido de los elementos en Mi unidad y en las unidades compartidas, lo que te permite organizar carpetas con contenido sensible junto con contenido compartido de forma más amplia.

Las carpetas con acceso limitado están disponibles en Mi unidad y en las unidades compartidas. El rol owner en Mi unidad y el rol organizer en las unidades compartidas siempre pueden acceder a las carpetas con acceso limitado. Para modificar la lista de usuarios de la carpeta, no se requieren permisos especiales. Los roles que pueden compartir carpetas pueden actualizar las listas de miembros. Para obtener más información sobre los roles y permisos, consulta Roles y permisos y Descripción general de las unidades compartidas.

Ten en cuenta que, aunque las carpetas son un tipo de archivo, el acceso limitado no está disponible para los archivos.

Cómo establecer acceso limitado en una carpeta

Si bien los usuarios con permisos directos de carpeta pueden acceder a una carpeta con acceso limitado, solo el rol owner en Mi unidad y el rol organizer en las unidades compartidas pueden habilitar o inhabilitar el acceso limitado.

Además, si un usuario con el rol writer en Mi unidad tiene el campo booleano writersCanShare en el recurso files establecido en true, también puede activar o desactivar la función.

Para limitar el acceso a una carpeta, establece el campo booleano inheritedPermissionsDisabled en el recurso files como true. Cuando es true, solo el rol owner, el rol organizer y los usuarios con permisos directos de carpeta pueden acceder a ella.

Para volver a activar los permisos heredados, establece inheritedPermissionsDisabled como false.

Cómo verificar el permiso para limitar el acceso a una carpeta

Para verificar si puedes limitar el acceso a una carpeta o no, inspecciona los valores booleanos de los capabilities.canDisableInheritedPermissions y capabilities.canEnableInheritedPermissions campos en el files recurso. Esta configuración confirma si tienes permiso para limitar el acceso a una carpeta a través del campo inheritedPermissionsDisabled.

Para obtener más información sobre capabilities, consulta Comprende las capacidades de los archivos.

Cómo enumerar los elementos secundarios de una carpeta con acceso limitado

Para verificar si puedes enumerar los elementos secundarios de una carpeta, usa el campo booleano capabilities.canListChildren.

El valor que se muestra siempre es false cuando el elemento no es una carpeta o si se quitó el acceso del solicitante al contenido de la carpeta estableciendo inheritedPermissionsDisabled como false.

Si se quitó tu acceso al contenido de la carpeta, aún puedes acceder a los metadatos de la carpeta con los métodos files.get() y files.list(). Para confirmar que el acceso es limitado, revisa el cuerpo de la respuesta para ver si el elemento es una carpeta con el tipo MIME application/vnd.google-apps.folder y si el campo capabilities.canListChildren está establecido como falso. Si intentas enumerar los elementos secundarios de una carpeta de este tipo, el resultado siempre estará vacío.

Cómo acceder a los metadatos de carpetas con acceso limitado

Las carpetas con acceso limitado te permiten ver los metadatos de la carpeta si no tienes acceso al contenido de la carpeta.

Cuando se usa el recurso permissions para determinar el acceso de un usuario, las carpetas de Mi unidad y de unidades compartidas que solo otorgan acceso a los metadatos contienen los siguientes valores en el cuerpo de la respuesta: inheritedPermissionsDisabled=true y view=metadata. El rol siempre se establece como reader. El campo view solo se propaga para los permisos que pertenecen a una view. Para obtener más información, consulta Vistas.

Todas las entradas del campo permissionDetails tienen el campo inherited establecido como true para indicar que el permiso se hereda y que no se otorgó acceso directo al contenido de la carpeta.

Para otorgar acceso al contenido y a los metadatos de la carpeta, establece el campo inheritedPermissionsDisabled como false o actualiza el rol a reader o un rol superior.

Por último, si un permiso se limitó primero desactivando la herencia en una carpeta (inheritedPermissionsDisabled=true) y, luego, se volvió a agregar directamente a la carpeta, los valores del cuerpo de la respuesta se convierten en inheritedPermissionsDisabled=true con el campo view sin configurar. Si la carpeta está en una unidad compartida, la lista permissionDetails tiene una entrada con el campo inherited establecido como false para indicar que el permiso no se hereda. Este permiso otorga acceso al contenido y a los metadatos de la carpeta como cualquier otro permiso.

Cómo borrar carpetas con acceso limitado

Puedes borrar carpetas con acceso limitado con el files.delete() método en el files recurso.

En Mi unidad, solo el propietario del elemento puede borrar una jerarquía de carpetas. Si un usuario borra una jerarquía con carpetas que tienen acceso limitado y que pertenecen a otras personas, estas carpetas se trasladan a la sección Mi unidad del propietario.

Si el usuario tiene el rol owner, se borra toda la jerarquía.

En las unidades compartidas, el rol organizer puede borrar jerarquías incluso si contienen carpetas con acceso limitado. Si el rol fileOrganizer borra una jerarquía que contiene carpetas con acceso limitado, el resultado depende de si se volvieron a agregar como fileOrganizer en las carpetas con acceso limitado. Si lo hicieron, se borra toda la jerarquía. De lo contrario, las carpetas con acceso limitado se trasladan a la carpeta raíz de la unidad compartida.

Acerca del acceso expansivo

La introducción de carpetas con acceso limitado amplía el modelo de acceso expansivo de las unidades compartidas a Mi unidad. Una vez que se implemente el modelo de acceso, tener acceso a una carpeta significará al menos el mismo nivel de acceso a todo lo que se encuentre en esa jerarquía de carpetas. Las carpetas con acceso limitado son la única excepción que permite restringir el acceso a una subcarpeta específica en Mi unidad y en las unidades compartidas. Esto también significa que, a menos que tu carpeta tenga acceso limitado, ya no podrás quitar el acceso que se hereda de la carpeta superior. Si lo haces, la API de Drive muestra una respuesta de error. Para definir un control de acceso más detallado dentro de una jerarquía, puedes establecer acceso limitado en la carpeta.

Cómo adaptarse al acceso expansivo

Para facilitar la adaptación de los desarrolladores al acceso expansivo, se realizaron varias mejoras en la API de Google Drive:

  1. Ahora, el campo permissionDetails[] del recurso permissions se propaga para los elementos de Mi unidad. Anteriormente, los campos no estaban configurados o se replicaban desde el campo teamDrivePermissionDetails cuando correspondía. Solo se propagan los campos permissionType y inherited en Mi unidad.

    El campo permissionDetails[].inherited indica si un permiso se hereda del elemento superior del elemento. Te permite detectar si ciertos roles (como reader) se heredan del elemento superior y si se otorga un rol superior (como writer) directamente en el elemento.

    Cuando ves los permisos de un elemento, el campo permissionDetails[] puede contener varias entradas. Si está presente, hay una entrada para el permiso directamente en el elemento para ese alcance y, luego, entradas para los permisos heredados o de miembro en el elemento.

  2. Los desarrolladores pueden habilitar el comportamiento de la API de acceso expansivo en Mi unidad antes de cualquier aplicación obligatoria futura. Puedes establecer el parámetro de solicitud enforceExpansiveAccess como true para que los cambios futuros en el acceso expansivo no afecten tu app.

    Si habilitas esta opción ahora, la API funcionará de la misma manera para los elementos de Mi unidad que para los elementos de las unidades compartidas. Por ejemplo, cualquier intento de restringir el acceso por debajo del rol heredado falla cuando se llama a permissions.update(). Del mismo modo, una llamada a permissions.delete() falla si se hereda el permiso.

Cómo detectar y evitar el acceso restringido

Es posible que tu app cree acceso restringido (en el que un usuario tiene acceso a la carpeta superior de Mi unidad, pero no a un archivo dentro de esa carpeta) en tus carpetas de Mi unidad cuando usas los métodos permissions.update() o permissions.delete().

Cuando usas estos métodos, puedes revisar los campos del recurso permissions para ver dónde una solicitud podría crear acceso restringido y evitar enviar esas solicitudes. Para detectar esta situación, usa el campo enforceExpansiveAccess en tu solicitud.

Además, si tu app ya creó acceso restringido en tus carpetas, puedes seguir estos pasos:

  1. Recorre la jerarquía de carpetas para quitar el acceso restringido. En su lugar, debes establecer acceso limitado a la carpeta.

  2. Si el elemento que intentas dejar de compartir es un archivo, puedes crear una carpeta intermedia, establecer acceso limitado en ella y mover el archivo dentro de la carpeta nueva.

  3. Si no quieres usar carpetas con acceso limitado, pero debes quitar algún acceso, puedes mover el archivo a una carpeta privada (como la carpeta raíz de Mi unidad). Luego, puedes crear un acceso directo a la ubicación original del elemento para que los usuarios puedan seguir usándolo.