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 las 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 tanto en Mi unidad como en las unidades compartidas.

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

Acerca de las carpetas con acceso limitado

Restringe las carpetas a usuarios específicos.

Las carpetas con acceso limitado te permiten restringir el acceso a carpetas para usuarios específicos. Solo los usuarios que agregues directamente a los permisos de la carpeta podrán 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 principal) pueden ver la carpeta restringida en Drive, pero no pueden 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. Los roles de owner en Mi unidad y de organizer en las unidades compartidas siempre pueden acceder a las carpetas con acceso limitado. No se requieren permisos especiales para modificar la lista de usuarios de la carpeta. Los roles que pueden compartir carpetas pueden actualizar las listas de miembros. Para obtener más información sobre los roles y los permisos, consulta Roles y permisos y Descripción general de las unidades compartidas.

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

Cómo establecer acceso limitado a una carpeta

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

Además, si un usuario con el rol de 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 del recurso files en true. Cuando es true, solo pueden acceder a ella el rol owner, el rol organizer y los usuarios con permisos directos para la carpeta.

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

Verifica el permiso para limitar el acceso a una carpeta

Para verificar si puedes limitar el acceso a una carpeta, inspecciona los valores booleanos de los campos capabilities.canDisableInheritedPermissions y capabilities.canEnableInheritedPermissions en el recurso files. Estos parámetros de configuración confirman 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 Información sobre las capacidades de los archivos.

Enumera 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 en 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, verifica el cuerpo de la respuesta para ver si el elemento es una carpeta con el tipo de MIME application/vnd.google-apps.folder y 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.

Accede a los metadatos de la carpeta con acceso limitado

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

Cuando se usa el recurso permissions para determinar el acceso de un usuario, tanto las carpetas de Mi unidad como las de la unidad compartida 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 en reader. El campo view solo se propaga para los permisos que pertenecen a un view. Para obtener más información, consulta Vistas.

Todas las entradas del campo permissionDetails tienen el campo inherited establecido en 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 los metadatos de la carpeta, establece el campo inheritedPermissionsDisabled en 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 en el cuerpo de la respuesta se convierten en inheritedPermissionsDisabled=true con el campo view como no establecido. Si la carpeta se encuentra en una unidad compartida, la lista permissionDetails tiene una entrada con el campo inherited establecido en false para indicar que el permiso no se hereda. Este permiso otorga acceso al contenido de la carpeta y a los metadatos, como cualquier otro permiso.

Cómo borrar carpetas con acceso limitado

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

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 de owner, se borra toda la jerarquía.

En las unidades compartidas, el rol de 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 dependerá de si se volvió a agregar como fileOrganizer en las carpetas con acceso limitado. Si lo fueran, se borraría toda la jerarquía. De lo contrario, las carpetas con acceso limitado se moverán a la carpeta raíz de la unidad compartida.

Acerca del acceso amplio

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á tener 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 heredado de la carpeta principal. Si lo haces, la API de Drive devolverá 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.

Adaptarse al acceso amplio

Para que los desarrolladores puedan adaptarse con mayor facilidad al acceso amplio, se realizaron varias mejoras en la API de Google Drive:

  1. El campo permissionDetails[] del recurso permissions ahora se propaga para los elementos de Mi unidad. Anteriormente, los campos no se configuraban 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 principal 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 veas los permisos de un elemento, es posible que el campo permissionDetails[] contenga 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 en true para que los cambios futuros en el acceso expansivo no afecten tu app.

    Si habilitas la opción ahora, la API funcionará de la misma manera para los elementos de Mi unidad que para los 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.

Detecta y evita el acceso restringido

Es posible que tu app esté creando acceso restringido (en el que un usuario tiene acceso a la carpeta principal 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 configurar el 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 a 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.