Proteggere i contenuti dei file

L'API Google Drive supporta diversi modi per impedire la modifica dei file, tra cui la limitazione dei contenuti dei file e la proibizione dell'opzione di download, stampa o copia dei file.

Impostare i file come di sola lettura con le limitazioni dei contenuti di Drive

Puoi aggiungere una limitazione dei contenuti a un file di Google Drive per impedire agli utenti di svolgere le seguenti operazioni:

  • Modifica del titolo
  • Apportare modifiche ai contenuti
  • Caricamento di una revisione
  • Aggiunta o modifica di commenti

L'applicazione di limitazioni dei contenuti è un meccanismo che consente di rendere i contenuti di un elemento di Drive di sola lettura senza modificare le autorizzazioni di accesso all'elemento. Ciò significa che non si tratta di una limitazione di accesso. Sebbene gli utenti non possano modificare i contenuti del file, altre operazioni sono comunque consentite in base al livello di accesso (ad esempio, un utente con accesso in modifica può comunque spostare un elemento o modificarne le impostazioni di condivisione).

Per aggiungere o rimuovere una limitazione dei contenuti da un file in Drive, un utente deve avere le autorizzazioni associate. Per un file o una cartella in Il mio Drive o su un Drive condiviso con capabilities.canModifyEditorContentRestriction, devi aver assegnato role=writer. Per un file o una cartella in Il mio Drive o in un Drive condiviso con una limitazione dei contenuti di ownerRestricted, devi essere il proprietario del file o avere role=organizer. Per visualizzare un elemento con una limitazione dei contenuti, gli utenti devono avere role=reader o versioni successive. Per un elenco completo dei ruoli, consulta Ruoli e autorizzazioni. Per modificare le autorizzazioni di un file, consulta Modificare le autorizzazioni.

Puoi utilizzare il campo booleano contentRestrictions.readOnly nella risorsa files per impostare una limitazione dei contenuti. Tieni presente che l'impostazione di una limitazione dei contenuti su un elemento soprascrive quella esistente.

Scenari per le limitazioni dei contenuti

Una limitazione dei contenuti su un elemento di Drive indica agli utenti che i contenuti non devono essere modificati. Ciò può essere dovuto a uno dei seguenti motivi:

  • Mettere in pausa il lavoro su un documento collaborativo durante i periodi di revisione o controllo.
  • Impostazione di un elemento su uno stato finale, ad esempio Approvato.
  • Impedire modifiche durante una riunione sensibile.
  • Vietare le modifiche esterne per i flussi di lavoro gestiti da sistemi automatici.
  • Limitare le modifiche apportate da Google Apps Script e dai componenti aggiuntivi di Google Workspace.
  • Evitare modifiche accidentali a un documento.

Tieni presente però che, sebbene le limitazioni dei contenuti possano essere utili per gestirli, non hanno lo scopo di impedire agli utenti con autorizzazioni sufficienti di continuare a lavorare a un elemento. Inoltre, non è un modo per creare un record immutabile. Le limitazioni dei contenuti di Drive sono modificabili, quindi una limitazione dei contenuti su un elemento non garantisce che l'elemento non venga mai modificato.

Gestire i file con limitazioni dei contenuti

Documenti, Fogli e Presentazioni Google, così come tutti gli altri file, possono contenere limitazioni relative ai contenuti.

Una limitazione dei contenuti su un articolo impedisce di modificare il titolo e i contenuti, tra cui:

  • Commenti e suggerimenti (su Documenti, Fogli, Presentazioni e file binari)
  • Revisioni di un file binario
  • Testo e formattazione in Documenti
  • Testo o formule in Fogli, un layout di Fogli e istanze in Fogli
  • Tutti i contenuti di Presentazioni, nonché l'ordine e il numero delle diapositive

Alcuni tipi di file non possono contenere limitazioni relative ai contenuti. Ecco alcuni esempi:

Aggiungere una limitazione dei contenuti

Per aggiungere una limitazione dei contenuti di un file, utilizza il metodo files.update con il contentRestrictions.readOnly impostato su true. Aggiungi un valore facoltativo reason per indicare il motivo per cui aggiungi la limitazione, ad esempio "Contratto finalizzato". Il seguente esempio di codice mostra come aggiungere una limitazione dei contenuti:

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;
  }
}

Sostituisci FILE_ID con il fileId del file che vuoi modificare.

Quando esegui il codice di esempio, i contenuti del file sono limitati e accanto al nome del file viene visualizzato un simbolo di blocco () nell'interfaccia utente (UI) di Google Drive. Il file è ora di sola lettura.

Un file con limitazioni relative ai contenuti all'interno di un elenco di file di Drive.
Figura 1. Un file con una limitazione dei contenuti all'interno di un elenco di file di Drive.

Rimuovere una limitazione dei contenuti

Per rimuovere una limitazione dei contenuti di un file, utilizza il metodo files.update con il campo contentRestrictions.readOnly impostato su false. Il seguente esempio di codice mostra come rimuovere una limitazione dei contenuti:

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;
  }
}

Sostituisci FILE_ID con il fileId del file che vuoi modificare.

Quando esegui il codice di esempio, il file non è più soggetto a limitazioni relative ai contenuti.

Puoi anche utilizzare l'interfaccia utente di Drive per rimuovere una limitazione dei contenuti e consentire la modifica dei contenuti (a condizione che tu disponga delle autorizzazioni corrette). Per farlo, hai due possibilità:

  1. In Drive, fai clic con il tasto destro del mouse sul file con una limitazione dei contenuti e poi su Sblocca .

    Rimuovere una limitazione dei contenuti di un file all'interno di un elenco di file di Drive.
    Figura 2. Rimuovere una limitazione dei contenuti di un file all'interno di un elenco di file di Drive.
  2. Apri il file con una limitazione dei contenuti e fai clic su (Modalità di blocco) > Sblocca file.

    Rimuovi una limitazione dei contenuti di un file all'interno di un documento.
    Figura 3. Rimuovere una limitazione dei contenuti di un file all'interno di un documento.

Verificare la presenza di una limitazione dei contenuti

Per verificare la presenza di una limitazione dei contenuti, utilizza il metodo files.get con il campo restituito contentRestrictions. Il seguente esempio di codice mostra come controllare lo stato di una limitazione dei contenuti:

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;
  }
}

Sostituisci FILE_ID con il fileId del file che vuoi controllare.

Quando esegui il codice di esempio, il metodo restituisce una risorsa ContentRestriction se presente.

Aggiungere una limitazione dei contenuti che solo il proprietario del file può modificare

Per aggiungere una limitazione dei contenuti dei file in modo che solo i proprietari dei file possano attivare/disattivare il meccanismo, utilizza il metodo files.update con il campo booleano contentRestrictions.ownerRestricted impostato su true. Il seguente esempio di codice mostra come aggiungere una limitazione dei contenuti solo per i proprietari dei file:

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;
  }
}

Sostituisci FILE_ID con il fileId del file che vuoi modificare.

Quando esegui il codice di esempio, i contenuti del file sono limitati e solo i proprietari possono rimuoverli. Se sei il proprietario del file, accanto al nome del file viene visualizzato un simbolo di blocco attivo () nell' interfaccia utente (UI) di Drive. Se non sei il proprietario, il simbolo del lucchetto è attenuato.

Per rimuovere il flag ownerRestricted, utilizza il metodo files.update con il campo contentRestrictions.ownerRestricted impostato su false.

Funzionalità di limitazione dei contenuti

Una risorsa files contiene una raccolta di campi capabilities booleani utilizzati per indicare se è possibile eseguire un'azione su un file.

Le limitazioni dei contenuti contengono i seguenti capabilities:

Per ulteriori informazioni, consulta Funzionalità.

Per un esempio di recupero del file capabilities, consulta Verificare le autorizzazioni dell'utente.

Impedire agli utenti di scaricare, stampare o copiare un file

Puoi limitare le modalità di scaricamento, stampa e copia dei file da parte degli utenti con autorizzazioni role=commenter o role=reader in Drive, Documenti, Fogli e Presentazioni.

Per rimuovere le opzioni per scaricare, stampare e copiare i file, utilizza il metodo files.update con il campo booleano copyRequiresWriterPermission impostato su true.