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 ai contenuti è un meccanismo che consente di impostare i contenuti di un elemento di Drive come di sola lettura senza modificare le autorizzazioni di accesso dell'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 su un file in Drive, un utente deve disporre delle autorizzazioni associate. Per un file o una cartella in Il mio Drive o in un Drive condiviso con il valore capabilities.canModifyEditorContentRestriction, devi avere role=writer assegnato. Per un file o una cartella in Il mio Drive o in un Drive condiviso con una limitazione dei contenuti ownerRestricted, devi essere il proprietario del file o avererole=organizer. Per visualizzare un articolo con limitazioni ai contenuti, gli utenti devono avererole=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 restrizione sui 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 ad alcuni dei seguenti motivi:

  • Mettere in pausa il lavoro su un documento collaborativo durante i periodi di revisione o controllo.
  • Impostazione di uno stato finale per un elemento, ad esempio Approvato.
  • Impedire le modifiche durante una riunione sensibile.
  • Vietare le modifiche esterne per i flussi di lavoro gestiti da sistemi automatici.
  • Limitazione delle 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 mutabili, pertanto una limitazione dei contenuti impostata su un elemento non garantisce che l'elemento non cambi mai.

Gestire i file con limitazioni relative ai 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 opzioni:

  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à protetta) > Sblocca file.

    Rimuovere 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 contentRestrictions campo restituito. 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 soggetti a limitazioni 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 della serratura è attenuato.

Per rimuovere il flag ownerRestricted, utilizza il metodo files.update con il 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à con cui gli utenti con autorizzazioni role=commenter o role=reader possono scaricare, stampare e copiare i file in Drive, Documenti, Fogli e Presentazioni.

Per rimuovere le opzioni di download, stampa e copia dei file, utilizza il metodo files.update con il copyRequiresWriterPermission campo booleano impostato su true.