Protege el contenido del archivo

La API de Google Drive admite varias formas de evitar la modificación de archivos, como la restricción de contenido de archivos y la prohibición de la opción de descargar, imprimir o copiar archivos.

Cómo establecer archivos 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 hagan lo siguiente:

  • Cómo modificar el título
  • Cómo editar contenido
  • Subir una revisión
  • Agregar o modificar comentarios

Aplicar restricciones de contenido es un mecanismo que permite que el contenido de un elemento de Drive sea de solo lectura sin cambiar sus permisos de acceso. Esto significa que no es una restricción de acceso. Si bien los usuarios no pueden modificar el contenido del archivo, se permiten otras operaciones según el 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, un usuario debe tener los permisos asociados. Para un archivo o una carpeta en Mi unidad o una unidad compartida con capabilities.canModifyEditorContentRestriction, debes tener asignado role=writer. Para un archivo o una carpeta en Mi unidad o una unidad compartida con una restricción de contenido ownerRestricted, debes ser propietario del archivo o tener role=organizer. Para ver un elemento con una restricción de contenido, los usuarios deben tener role=reader o un valor superior. Para obtener una lista completa de los roles, consulta Roles y permisos. Para cambiar los permisos de un archivo, consulta Cómo cambiar los permisos.

Puedes usar el campo booleano contentRestrictions.readOnly en el recurso files para establecer una restricción de contenido. Ten en cuenta que configurar una restricción de contenido en un elemento reemplaza la existente.

Situaciones para restricciones de contenido

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

  • Detener 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
  • Se prohíben los cambios externos en los flujos de trabajo que manejan los sistemas automatizados.
  • Restringir las ediciones realizadas por Google 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 administrar contenido, no están diseñadas para evitar que los usuarios con permisos suficientes continúen 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 este nunca cambie.

Cómo administrar 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 realicen cambios en 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 instancias en Hojas de cálculo
  • Todo el contenido de Presentaciones, así como el orden y la cantidad de diapositivas

Ciertos tipos de archivos no pueden contener restricciones de contenido. Algunos ejemplos son los siguientes:

Cómo agregar una restricción de contenido

Para agregar una restricción de contenido del archivo, usa el método files.update con el campo contentRestrictions.readOnly establecido en true. Agrega un reason opcional para indicar el motivo por el que agregas la restricción, como "Contrato finalizado". En la siguiente muestra 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 una restricción de contenido y aparece un símbolo de bloqueo () junto al nombre del archivo dentro de la interfaz de usuario (IU) de Google Drive. El archivo ahora es de solo lectura.

Un archivo con una restricción de contenido en 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 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 la muestra de código, el archivo ya no tiene contenido restringido.

También puedes usar la IU de Drive para quitar una restricción de contenido y permitir su edición (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 .

    Quitar una restricción de contenido de un archivo en una lista de archivos de Drive
    Figura 2: Quitar una restricción de contenido de un archivo de 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 archivo de un documento.
    Figura 3: Quitar una 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 muestra. En la siguiente muestra de código, se muestra 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 comprobar.

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

Agrega una restricción de contenido que solo el propietario del archivo pueda modificar

Para agregar una restricción de contenido de archivo de modo que solo los propietarios del archivo puedan activar o desactivar el mecanismo, usa el método files.update con el campo booleano contentRestrictions.ownerRestricted establecido en true. En la siguiente muestra de código, se indica 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 contenido restringido y solo los propietarios del archivo 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 estará atenuado.

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

Funciones de restricción de contenido

Un recurso files contiene una recopilació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 elementos capabilities:

Para obtener más información, consulta Funciones.

Para ver un ejemplo de cómo recuperar el archivo capabilities, consulta Cómo verificar los permisos del usuario.

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

Puedes limitar la forma en que los usuarios con permisos role=commenter o role=reader pueden descargar, imprimir y copiar archivos dentro de Drive, Documentos, Hojas de cálculo y Presentaciones.

Para quitar las opciones de descarga, impresión y copia de archivos, usa el método files.update con el campo booleano copyRequiresWriterPermission establecido en true.