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 il divieto di scaricare, stampare o copiare i file.

Rendere i file di sola lettura con limitazioni dei contenuti di Drive

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

  • 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 di sola lettura i contenuti di un elemento di Drive senza modificare le autorizzazioni di accesso dell'elemento. Ciò significa che non è una limitazione di accesso. Sebbene gli utenti non possano modificare i contenuti del file, sono comunque consentite altre operazioni 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 in un file in Drive, un utente deve disporre delle autorizzazioni associate. Per un file o una cartella su 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 su un Drive condiviso con restrizione 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 per un file, vedi 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 per un elemento sovrascriverà quella esistente.

Scenari relativi alle 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:

  • Sospendere il lavoro su un documento collaborativo durante i periodi di revisione o controllo.
  • Impostazione di un elemento sullo stato "Conclusa", ad esempio Approvato.
  • Impedire le modifiche durante una riunione sensibile.
  • Divieto di modifiche esterne per flussi di lavoro gestiti da sistemi automatici.
  • Limitare le modifiche da parte di Google Apps Script e dei componenti aggiuntivi di Google Workspace.
  • Evitare le modifiche accidentali a un documento.

Tieni presente che, anche se le limitazioni dei contenuti possono aiutare a gestire i contenuti, non è utile per impedire agli utenti con autorizzazioni sufficienti di continuare a lavorare su un elemento. Inoltre, non è un modo per creare un record immutabile. Le restrizioni dei contenuti di Drive sono modificabili, pertanto una limitazione dei contenuti di un elemento non garantisce che l'elemento non cambi mai.

Gestire i file con limitazioni dei contenuti

Documenti Google, Fogli Google e Presentazioni Google, così come tutti gli altri file, possono includere limitazioni dei contenuti.

Una limitazione dei contenuti di un elemento impedisce la modifica del titolo e dei 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, così come l'ordine e il numero delle diapositive

Alcuni tipi di file non possono contenere una limitazione dei contenuti. Ecco alcuni esempi:

Aggiungere una limitazione dei contenuti

Per aggiungere una limitazione dei contenuti dei file, utilizza il metodo files.update con il campo contentRestrictions.readOnly impostato su true. Aggiungi un elemento reason facoltativo per il motivo dell'aggiunta della limitazione, ad esempio "Contratto concluso". 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 valore fileId del file che vuoi modificare.

Quando esegui il codice campione, il file è limitato ai contenuti e viene visualizzato un simbolo di blocco () accanto al nome del file nell'interfaccia utente (UI) di Google Drive. Ora il file è di sola lettura.

Un file con una limitazione dei 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 valore fileId del file che vuoi modificare.

Quando esegui il codice campione, il file non è più soggetto a limitazioni per i contenuti.

Puoi anche utilizzare l'interfaccia utente di Drive per rimuovere una restrizione dei contenuti e consentire la modifica dei contenuti (a condizione di disporre delle autorizzazioni corrette). Per farlo, hai due opzioni:

  1. Su Drive, fai clic con il pulsante destro del mouse sul file con una restrizione di contenuti e fai clic su Sblocca .

    Rimuovere una limitazione dei contenuti dei file all'interno di un elenco di file di Drive.
    Figura 2. Rimuovi una limitazione dei contenuti dei 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. Rimuovi una limitazione dei contenuti dei file all'interno di un documento.

Verificare la presenza di una limitazione dei contenuti

Per verificare se è presente una limitazione dei contenuti, utilizza il metodo files.get con il campo contentRestrictions 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 valore fileId del file che vuoi controllare.

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

Aggiungi una limitazione dei contenuti modificabile solo dal proprietario del file

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 ai 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 valore fileId del file che vuoi modificare.

Quando esegui il codice campione, il file è soggetto a limitazioni per i contenuti e solo i proprietari possono rimuoverlo. Se sei il proprietario del file, nell' interfaccia utente di Drive (UI) viene visualizzato un simbolo di blocco attivo () accanto al nome del file. 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 includono i seguenti capabilities:

Per ulteriori informazioni, consulta la sezione Funzionalità.

Per un esempio di recupero del file capabilities, consulta Verificare le autorizzazioni degli utenti.

Impedire agli utenti di scaricare, stampare o copiare i file

Puoi limitare il modo in cui gli utenti con autorizzazioni role=commenter o role=reader possono scaricare, stampare e copiare file su Drive, Documenti, Fogli e Presentazioni.

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