Protege el contenido del archivo

La API de Google Drive admite varias formas de evitar la modificación de archivos, como restringir el contenido de los archivos y prohibir la opción de descargarlos, imprimirlos o copiarlos.

Cómo hacer que los archivos sean de solo lectura con las restricciones de contenido de Drive

Puedes agregar una restricción de contenido a un archivo de Google Drive para evitar que los usuarios realicen las siguientes acciones:

  • Cómo modificar el título
  • Cómo realizar ediciones de contenido
  • Cómo subir una revisión
  • Agregar o modificar comentarios

Una restricción de contenido no es una restricción de acceso. Si bien los usuarios no pueden modificar el contenido del archivo, se permiten otras operaciones según su nivel de acceso. Por ejemplo, un usuario con acceso de edición puede mover un elemento o cambiar su configuración de uso compartido.

Para agregar o quitar una restricción de contenido en un archivo de Drive, el usuario debe tener el permissions asociado. Para un archivo o una carpeta en Mi unidad o en una unidad compartida con el ícono capabilities.canModifyEditorContentRestriction, debes tener asignado el rol de role=writer. En el caso de un archivo o una carpeta de Mi unidad o de una unidad compartida con una restricción de contenido ownerRestricted, debes ser el propietario del archivo o tener role=organizer. Para ver un elemento con restricción de contenido, los usuarios deben tener role=reader o una versión posterior. Para obtener una lista completa de los roles, consulta Roles y permisos. Para actualizar los permisos de un archivo, consulta Actualiza los permisos.

Puedes usar el campo booleano contentRestrictions.readOnly en el recurso files para establecer una restricción de contenido. Ten en cuenta que, si estableces una restricción de contenido en un elemento, se reemplazará la existente.

Situaciones para las restricciones de contenido

Una restricción de contenido en un elemento de Drive indica a los usuarios que no se debe cambiar el contenido. Esto puede deberse a algunos de los siguientes motivos:

  • Pausar el trabajo en un documento colaborativo durante los períodos de revisión o auditoría
  • Establecer un elemento en un estado finalizado, como aprobado
  • Evitar cambios durante una reunión sensible
  • Prohibir los cambios externos para los flujos de trabajo que manejan los sistemas automatizados
  • Restricción de ediciones por parte de Apps Script y los complementos de Google Workspace
  • Evitar ediciones accidentales en un documento

Sin embargo, ten en cuenta que, si bien las restricciones de contenido pueden ayudar a administrarlo, no están diseñadas para impedir que los usuarios con permisos suficientes sigan trabajando en un elemento. Además, no es una forma de crear un registro inmutable. Las restricciones de contenido de Drive son mutables, por lo que una restricción de contenido en un elemento no garantiza que el elemento nunca cambie.

Administra archivos con restricciones de contenido

Documentos, Hojas de cálculo y Presentaciones de Google, así como todos los demás archivos, pueden contener restricciones de contenido.

Una restricción de contenido en un elemento impide que se modifiquen su título y contenido, lo que incluye lo siguiente:

  • Comentarios y sugerencias (en Documentos, Hojas de cálculo, Presentaciones y archivos binarios)
  • Revisiones de un archivo binario
  • Texto y formato en Documentos
  • Texto o fórmulas en Hojas de cálculo, un diseño de Hojas de cálculo y las instancias en Hojas de cálculo
  • Todo el contenido de las diapositivas, así como el orden y la cantidad de diapositivas

Ciertos tipos de archivos no pueden contener una restricción de contenido. Algunos ejemplos son los siguientes:

Cómo agregar una restricción de contenido

Para agregar una restricción de contenido de archivo, usa el método files.update con el campo contentRestrictions.readOnly establecido en true. Agrega un reason opcional para explicar por qué agregas la restricción, como "Contrato finalizado". En el siguiente ejemplo de código, se muestra cómo agregar una restricción de contenido:

Java

File updatedFile =
  new File()
      .setContentRestrictions(
          ImmutableList.of(new ContentRestriction().setReadOnly(true).setReason("Finalized contract."));

File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();

Python

content_restriction = {'readOnly': True, 'reason':'Finalized contract.'}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

Node.js

/**
* Set a content restriction on a file.
* @return{obj} updated file
**/
async function addContentRestriction() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  const contentRestriction = {
    'readOnly': True,
    'reason': 'Finalized contract.',
  };
  const updatedFile = {
    'contentRestrictions': [contentRestriction],
  };
  try {
    const response = await service.files.update({
      fileId: 'FILE_ID',
      resource: updatedFile,
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Reemplaza FILE_ID por el fileId del archivo que deseas modificar.

Cuando ejecutas el código de muestra, el archivo tiene restricciones de contenido y aparece un símbolo de candado () junto al nombre del archivo en la interfaz de usuario (IU) de Google Drive. El archivo ahora es de solo lectura.

Es un archivo con una restricción de contenido dentro de una lista de archivos de Drive.
Figura 1: Un archivo con una restricción de contenido en una lista de archivos de Drive.

Cómo quitar una restricción de contenido

Para quitar una restricción de contenido de un archivo, usa el método files.update con el campo contentRestrictions.readOnly establecido en false. En la siguiente muestra de código, se muestra cómo quitar una restricción de contenido:

Java

File updatedFile =
new File()
    .setContentRestrictions(
        ImmutableList.of(new ContentRestriction().setReadOnly(false));

File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();

Python

content_restriction = {'readOnly': False}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

Node.js

/**
* Remove a content restriction on a file.
* @return{obj} updated file
**/
async function removeContentRestriction() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  const contentRestriction = {
    'readOnly': False,
  };
  const updatedFile = {
    'contentRestrictions': [contentRestriction],
  };
  try {
    const response = await service.files.update({
      fileId: 'FILE_ID',
      resource: updatedFile,
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Reemplaza FILE_ID por el fileId del archivo que deseas modificar.

Cuando ejecutas el código de muestra, el archivo ya no tiene restricciones de contenido.

También puedes usar la IU de Drive para quitar una restricción de contenido y permitir la edición de contenido (siempre que tengas los permisos correctos). Existen dos opciones para hacerlo:

  1. En Drive, haz clic con el botón derecho en el archivo con una restricción de contenido y, luego, en Desbloquear .

    Quita la restricción de contenido de un archivo en una lista de archivos de Drive.
    Figura 2: Quita la restricción de contenido de un archivo en una lista de archivos de Drive.
  2. Abre el archivo con una restricción de contenido y haz clic en (Modo bloqueado) > Desbloquear archivo.

    Quita una restricción de contenido de un archivo dentro de un documento.
    Figura 3: Quita la restricción de contenido de un archivo dentro de un documento.

Cómo verificar si hay una restricción de contenido

Para verificar si hay una restricción de contenido, usa el método files.get con el campo contentRestrictions que se devolvió. En la siguiente muestra de código, se indica cómo verificar el estado de una restricción de contenido:

Java

File response = driveService.files().get("FILE_ID").setFields("contentRestrictions").execute();

Python

response = drive_service.files().get(fileId="FILE_ID", fields = "contentRestrictions").execute();

Node.js

/**
* Get content restrictions on a file.
* @return{obj} updated file
**/
async function fetchContentRestrictions() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  try {
    const response = await service.files.get({
      fileId: 'FILE_ID',
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Reemplaza FILE_ID por el fileId del archivo que deseas verificar.

Cuando ejecutas el código de muestra, el método devuelve un recurso ContentRestriction si está presente.

Agregar una restricción de contenido que solo el propietario del archivo puede modificar

Para agregar una restricción de contenido de archivo de modo que solo los propietarios de archivos puedan activar o desactivar el mecanismo, usa el método files.update con el campo booleano contentRestrictions.ownerRestricted establecido en true. En el siguiente ejemplo de código, se muestra cómo agregar una restricción de contenido solo para los propietarios de archivos:

Java

File updatedFile =
  new File()
      .setContentRestrictions(
          ImmutableList.of(new ContentRestriction().setReadOnly(true).setOwnerRestricted(true).setReason("Finalized contract."));

File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();

Python

content_restriction = {'readOnly': True, 'ownerRestricted': True, 'reason':'Finalized contract.'}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

Node.js

/**
* Set an owner restricted content restriction on a file.
* @return{obj} updated file
**/
async function addOwnerRestrictedContentRestriction() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  const contentRestriction = {
    'readOnly': True,
    'ownerRestricted': True,
    'reason': 'Finalized contract.',
  };
  const updatedFile = {
    'contentRestrictions': [contentRestriction],
  };
  try {
    const response = await service.files.update({
      fileId: 'FILE_ID',
      resource: updatedFile,
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Reemplaza FILE_ID por el fileId del archivo que deseas modificar.

Cuando ejecutas el código de muestra, el archivo tiene restricciones de contenido y solo los propietarios pueden quitarlo. Si eres el propietario del archivo, aparecerá un símbolo de bloqueo activo () junto al nombre del archivo en la interfaz de usuario (IU) de Drive. Si no eres el propietario, el símbolo de candado aparecerá atenuado.

Para quitar la marca ownerRestricted, usa el método files.update con el campo contentRestrictions.ownerRestricted establecido en false.

Funciones de restricción de contenido

Un recurso files contiene una colección de campos capabilities booleanos que se usan para indicar si se puede realizar una acción en un archivo.

Las restricciones de contenido incluyen los siguientes capabilities:

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

Para ver un ejemplo de cómo recuperar el archivo capabilities, consulta Cómo obtener las capacidades de un archivo.

Cómo evitar que los usuarios descarguen, impriman o copien tu archivo

Puedes limitar la forma en que los usuarios pueden descargar, imprimir y copiar archivos en Drive, Documentos, Hojas de cálculo y Presentaciones.

Para determinar si el usuario puede cambiar las restricciones de descarga aplicadas por el propietario o el organizador de un archivo, verifica el campo booleano capabilities.canChangeItemDownloadRestriction. Si capabilities.canChangeItemDownloadRestriction se establece en true, se pueden aplicar restricciones de descarga al archivo. Para obtener más información, consulta Cómo comprender las capacidades de los archivos.

Para aplicar restricciones de descarga a un archivo, configura el campo downloadRestrictions con el método files.update. Puedes configurar el campo con el objeto DownloadRestrictionsMetadata.

El objeto DownloadRestrictionsMetadata tiene dos campos: itemDownloadRestriction y effectiveDownloadRestrictionWithContext. Ambos campos son legibles, pero solo se puede establecer el itemDownloadRestriction. El campo itemDownloadRestriction devuelve un objeto DownloadRestriction. El objeto DownloadRestriction tiene dos campos booleanos separados: restrictedForReaders y restrictedForWriters.

Cuando se configura el campo itemDownloadRestriction, el propietario o el organizador aplica directamente la restricción de descarga del archivo. No tiene en cuenta la configuración de las unidades compartidas ni las reglas de prevención de pérdida de datos (DLP). Para obtener más información, consulta Acerca de la DLP.

Si actualizas el campo itemDownloadRestriction configurando el campo restrictedForWriters como true, esto implica que restrictedForReaders es true. Del mismo modo, establecer restrictedForWriters en true y restrictedForReaders en false equivale a establecer restrictedForWriters y restrictedForReaders en true.

En el caso del campo effectiveDownloadRestrictionWithContext, la restricción de descarga se aplica al archivo y tiene en cuenta todos los parámetros de configuración de restricción y las reglas de la DLP.

El campo effectiveDownloadRestrictionWithContext se puede establecer en restrictedForWriters o restrictedForReaders. Si hay algún parámetro de configuración de restricción de descarga o copia para los roles correspondientes en la configuración de archivos, la configuración de unidades compartidas o las reglas de la DLP (incluidas las que tienen contexto), el valor se establece en true; de lo contrario, se establece en false.

Retrocompatibilidad

Te recomendamos que uses el objeto DownloadRestriction para aplicar cómo los usuarios pueden descargar, imprimir y copiar archivos.

Si quieres usar el campo booleano copyRequiresWriterPermission, la funcionalidad es diferente para leer y escribir en el campo.

El valor recuperado del campo copyRequiresWriterPermission refleja si los usuarios con el permiso role=commenter o role=reader pueden descargar, imprimir o copiar archivos en Drive. El valor del campo refleja la combinación de la configuración del archivo, la configuración de la unidad compartida o las reglas de DLP. Sin embargo, no se incluye la evaluación del contexto para las reglas de DLP.

Si configuras el campo copyRequiresWriterPermission como false, se actualizarán los campos restrictedForWriters y restrictedForReaders a false. Esto significa que se quitarán los parámetros de configuración de restricción de descarga o copia para todos los usuarios.

Campos que controlan las funciones de descarga, impresión y copia

En la siguiente tabla, se enumeran los campos de recursos de files que afectan la funcionalidad de descarga, impresión y copia:

Campo Descripción Versión
capabilities.canCopy Indica si el usuario actual puede copiar un archivo. v2 y v3
capabilities.canDownload Indica si el usuario actual puede descargar un archivo. v2 y v3
capabilities.canChangeCopyRequiresWriterPermission Indica si el usuario actual puede cambiar la restricción copyRequiresWriterPermission de un archivo. v2 y v3
capabilities.canChangeItemDownloadRestriction Indica si el usuario actual puede cambiar la restricción de descarga de un archivo. Solo v3
copyRequiresWriterPermission Indica si se deben inhabilitar las opciones para copiar, imprimir o descargar este archivo para los lectores y comentaristas. v2 y v3
downloadRestrictions Son las restricciones de descarga que se aplican a un archivo. Solo v3