La API de Google Drive admite varias formas de evitar la modificación de archivos, incluida la restricción del contenido del archivo y la prohibición de la opción de descargar, imprimir o copiar archivos.
Haz 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 impedir que los usuarios realicen las siguientes acciones:
- Modifica el título
- Cómo realizar cambios en el contenido
- Sube una revisión
- Cómo 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 los permisos de acceso de ese elemento. 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 en Drive, un usuario debe tener los permisos asociados. Para un archivo o una carpeta de Mi unidad o una unidad compartida con el capabilities.canModifyEditorContentRestriction
, debes tener role=writer
asignado. En el caso de un archivo o una carpeta de Mi unidad o de una unidad compartida con una restricción de contenido de ownerRestricted
, debes ser el propietario del archivo o tener role=organizer
. Para ver un elemento con una restricción de contenido, los usuarios deben tener role=reader
o una versión posterior. Para obtener una lista completa de las funciones, consulta Funciones 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 el existente.
Situaciones de restricciones de contenido
Una restricción de contenido en un elemento de Drive les indica a los usuarios que el contenido no debe cambiarse. Esto puede deberse a alguno de los siguientes motivos:
- Pausa del trabajo en un documento colaborativo durante los períodos de revisión o auditoría.
- Configurar un elemento a un estado finalizado, como aprobado.
- Evitar cambios durante una reunión sensible.
- Prohibir los cambios externos en los flujos de trabajo controlados por sistemas automatizados.
- Se restringen las ediciones realizadas por complementos de Google Workspace y Google Apps Script.
- Evitar ediciones accidentales en un documento
Sin embargo, ten en cuenta que, si bien las restricciones de contenido pueden ayudar a administrar el contenido, no está destinada a impedir que los usuarios con permisos suficientes sigan trabajando en un elemento. Además, no es una manera 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.
Administra archivos con restricciones de contenido
Documentos de Google, Hojas de cálculo de Google y Presentaciones de Google, así como todos los demás archivos, pueden incluir restricciones de contenido.
Una restricción de contenido en un elemento evita cambios en el título y en el contenido, como los siguientes:
- 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 Sheets, un diseño de Sheets e instancias en Sheets
- Todo el contenido de Presentaciones, así como el orden y la cantidad de diapositivas
Algunos tipos de archivos no pueden incluir una restricción de contenido. Algunos ejemplos son los siguientes:
- Formularios de Google
- Google Sites
- Dibujos de Google
- Accesos directos y accesos directos de terceros Para obtener más información, consulta Cómo crear un archivo de acceso directo al contenido almacenado por tu app y Cómo crear un acceso directo a un archivo de Drive.
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 indicar por qué agregas la restricción, como "Contrato finalizado". En la siguiente muestra de código, se indica 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 contenido restringido y aparece un símbolo de bloqueo (interfaz de usuario (IU) de Google Drive. El archivo ahora es de solo lectura.
) junto al nombre del archivo en laCó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
configurado como false
. En la siguiente muestra de código, se indica 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:
En Drive, haz clic con el botón derecho en el archivo que tenga una restricción de contenido y selecciona Desbloquear
.Abre el archivo con una restricción de contenido y haz clic en (Modo bloqueado) > Desbloquear archivo.
Verifica si hay restricciones de contenido
Para verificar si hay una restricción de contenido, usa el método files.get
con el campo que se muestra contentRestrictions
. En la siguiente muestra de código, verás 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 muestra un recurso ContentRestriction
si está presente.
Cómo 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 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 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 ( interfaz de usuario (IU) de Drive. Si no eres el propietario, el símbolo de la cerradura se atenuará.
) junto al nombre del archivo en laPara 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 colección de campos booleanos capabilities
que se usan para indicar si se puede realizar una acción en un archivo.
Las restricciones de contenido incluyen los siguientes capabilities
:
capabilities.canModifyEditorContentRestriction
: Indica si el usuario actual puede agregar o modificar una restricción de contenido.capabilities.canModifyOwnerContentRestriction
: Indica si el usuario actual puede agregar o modificar una restricción de contenido de propietario.capabilities.canRemoveContentRestriction
: Indica si el usuario actual puede quitar la restricción de contenido aplicada (si existe).
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.
Impedir 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 en Drive, Documentos, Hojas de cálculo y Presentaciones.
Si deseas quitar las opciones de descarga, impresión y copia de archivos, usa el método files.update
con el campo booleano copyRequiresWriterPermission
configurado como true
.