Proteger o conteúdo do arquivo

A API Google Drive oferece suporte a várias maneiras de impedir a modificação de arquivos, incluindo restrição de conteúdo e proibição da opção de baixar, imprimir ou copiar arquivos.

Definir arquivos como somente leitura com as restrições de conteúdo do Drive

É possível adicionar uma restrição de conteúdo a um arquivo do Google Drive para impedir que os usuários façam o seguinte:

  • Mudar o título
  • Fazer edições no conteúdo
  • Como fazer upload de uma revisão
  • Adicionar ou modificar comentários

Uma restrição de conteúdo não é uma restrição de acesso. Embora os usuários não possam modificar o conteúdo do arquivo, outras operações ainda são permitidas, com base no nível de acesso. Por exemplo, um usuário com acesso de edição ainda pode mover um item ou mudar as configurações de compartilhamento dele.

Para adicionar ou remover uma restrição de conteúdo em um arquivo no Drive, o usuário precisa ter a permissions associada. Para um arquivo ou uma pasta no Meu Drive ou em um drive compartilhado com o capabilities.canModifyEditorContentRestriction, você precisa ter role=writer atribuído. Para um arquivo ou pasta no Meu Drive ou em um drive compartilhado com uma restrição de conteúdo ownerRestricted, você precisa ser o proprietário do item ou ter role=organizer. Para acessar um item com restrição de conteúdo, os usuários precisam ter o role=reader ou uma versão mais recente. Para uma lista completa de papéis, consulte Papéis e permissões. Para atualizar as permissões de um arquivo, consulte Atualizar permissões.

Use o campo booleano contentRestrictions.readOnly no recurso files para definir uma restrição de conteúdo. Definir uma restrição de conteúdo em um item substitui a restrição existente.

Cenários para restrições de conteúdo

Uma restrição de conteúdo em um item do Drive indica aos usuários que o conteúdo não deve ser alterado. Isso pode acontecer por alguns dos seguintes motivos:

  • Pausar o trabalho em um documento colaborativo durante períodos de revisão ou auditoria.
  • Definir um item como um estado finalizado, como "Aprovado".
  • Evitar mudanças durante uma reunião importante.
  • Proibir mudanças externas em fluxos de trabalho processados por sistemas automatizados.
  • Restringir edições pelo Google Apps Script e complementos do Google Workspace.
  • Evitar edições acidentais em um documento.

No entanto, embora as restrições de conteúdo ajudem a gerenciar o conteúdo, elas não foram criadas para impedir que usuários com permissões suficientes continuem trabalhando em um item. Além disso, não é uma maneira de criar um registro imutável. As restrições de conteúdo do Drive são mutáveis. Portanto, uma restrição em um item não garante que ele nunca vai mudar.

Gerenciar arquivos com restrições de conteúdo

Os apps Documentos, Planilhas e Apresentações Google, assim como todos os outros arquivos, podem ter restrições de conteúdo.

Uma restrição de conteúdo em um item impede mudanças no título e no conteúdo dele, incluindo:

  • Comentários e sugestões (nos apps Documentos, Planilhas, Apresentações e arquivos binários)
  • Revisões de um arquivo binário
  • Texto e formatação no app Documentos
  • Texto ou fórmulas nas Planilhas, um layout das Planilhas e instâncias nas Planilhas
  • Todo o conteúdo do Apresentações, bem como a ordem e o número dos slides

Alguns tipos de arquivo não podem ter uma restrição de conteúdo. Vejas alguns exemplos:

Adicionar uma restrição de conteúdo

Para adicionar uma restrição de conteúdo de arquivo, use o método files.update com o campo contentRestrictions.readOnly definido como true. Adicione um reason opcional para explicar por que você está adicionando a restrição, como "Contrato finalizado". O exemplo de código a seguir mostra como adicionar uma restrição de conteúdo:

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

Substitua FILE_ID pelo fileId do arquivo que você quer modificar.

Quando você executa o código de exemplo, o arquivo tem restrição de conteúdo, e um símbolo de bloqueio () aparece ao lado do nome do arquivo na interface do usuário do Google Drive (UI). Agora o arquivo é somente leitura.

Um arquivo com uma restrição de conteúdo em uma lista de arquivos do Drive.
Figura 1. Um arquivo com uma restrição de conteúdo em uma lista de arquivos do Drive.

Remover uma restrição de conteúdo

Para remover uma restrição de conteúdo de arquivo, use o método files.update com o campo contentRestrictions.readOnly definido como false. O exemplo de código a seguir mostra como remover uma restrição de conteúdo:

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

Substitua FILE_ID pelo fileId do arquivo que você quer modificar.

Quando você executa o exemplo de código, o arquivo não tem mais restrição de conteúdo.

Você também pode usar a interface do Drive para remover uma restrição de conteúdo e permitir a edição (desde que tenha as permissões corretas). Há duas opções para fazer isso:

  1. No Drive, clique com o botão direito do mouse no arquivo com uma restrição de conteúdo e clique em Desbloquear .

    Remove uma restrição de conteúdo de arquivo em uma lista de arquivos do Drive.
    Figura 2. Remova uma restrição de conteúdo de arquivo em uma lista de arquivos do Drive.
  2. Abra o arquivo com uma restrição de conteúdo e clique em (Modo bloqueado) > Desbloquear arquivo.

    Remove uma restrição de conteúdo de arquivo em um documento.
    Figura 3. Remove uma restrição de conteúdo de arquivo em um documento.

Verificar se há uma restrição de conteúdo

Para verificar uma restrição de conteúdo, use o método files.get com o campo contentRestrictions retornado. O exemplo de código a seguir mostra como verificar o status de uma restrição de conteúdo:

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

Substitua FILE_ID pelo fileId do arquivo que você quer verificar.

Ao executar o exemplo de código, o método retorna um recurso ContentRestriction, se houver.

Adicionar uma restrição de conteúdo que só o proprietário do arquivo pode modificar

Para adicionar uma restrição de conteúdo de arquivo para que apenas os proprietários possam ativar/desativar o mecanismo, use o método files.update com o campo booleano contentRestrictions.ownerRestricted definido como true. O exemplo de código a seguir mostra como adicionar uma restrição de conteúdo apenas para proprietários de arquivos:

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

Substitua FILE_ID pelo fileId do arquivo que você quer modificar.

Quando você executa o código de amostra, o arquivo tem restrição de conteúdo e só os proprietários podem removê-lo. Se você for o proprietário do arquivo, um símbolo de bloqueio ativo () vai aparecer ao lado do nome do arquivo na interface do usuário (UI) do Drive. Se você não for o proprietário, o símbolo de bloqueio vai aparecer esmaecido.

Para remover a flag ownerRestricted, use o método files.update com o campo contentRestrictions.ownerRestricted definido como false.

Recursos de restrição de conteúdo

Um recurso files contém uma coleção de campos booleanos capabilities usados para indicar se uma ação pode ser realizada em um arquivo.

As restrições de conteúdo contêm as seguintes capabilities:

Para mais informações, consulte Entender os recursos de arquivos.

Para um exemplo de como recuperar o arquivo capabilities, consulte Receber recursos do arquivo.

Impedir que os usuários baixem, imprimam ou copiem seu arquivo

Você pode limitar o download, a impressão e a cópia de arquivos no Drive, nos Documentos, nas Planilhas e nas Apresentações.

Para determinar se o usuário pode mudar o proprietário ou as restrições de download aplicadas pelo organizador de um arquivo, verifique o campo booleano capabilities.canChangeItemDownloadRestriction. Se capabilities.canChangeItemDownloadRestriction estiver definido como true, as restrições de download poderão ser aplicadas ao arquivo. Para mais informações, consulte Entender recursos de arquivo.

Para aplicar restrições de download a um arquivo, defina o campo downloadRestrictions usando o método files.update. Você pode definir o campo usando o objeto DownloadRestrictionsMetadata.

O objeto DownloadRestrictionsMetadata tem dois campos: itemDownloadRestriction e effectiveDownloadRestrictionWithContext. Os dois campos são legíveis, mas apenas itemDownloadRestriction pode ser definido. O campo itemDownloadRestriction retorna um objeto DownloadRestriction. O objeto DownloadRestriction tem dois campos booleanos separados: restrictedForReaders e restrictedForWriters.

Ao definir o campo itemDownloadRestriction, a restrição de download do arquivo é aplicada diretamente pelo proprietário ou organizador. Ela não considera as configurações de unidades compartilhadas nem as regras de prevenção contra perda de dados (DLP). Para mais informações, consulte Sobre a DLP.

Se você atualizar o campo itemDownloadRestriction definindo o campo restrictedForWriters como true, isso significa que restrictedForReaders é true. Da mesma forma, definir restrictedForWriters como true e restrictedForReaders como false equivale a definir restrictedForWriters e restrictedForReaders como true.

Para o campo effectiveDownloadRestrictionWithContext, a restrição de download é aplicada ao arquivo e considera todas as configurações de restrição e regras de DLP.

O campo effectiveDownloadRestrictionWithContext pode ser definido como restrictedForWriters ou restrictedForReaders. Se houver alguma configuração de restrição de download ou cópia para as funções correspondentes nas configurações de arquivo, nas configurações de drive compartilhado ou nas regras de DLP (incluindo aquelas com contexto), o valor será definido como true. Caso contrário, será false.

Compatibilidade com versões anteriores

Recomendamos usar o objeto DownloadRestriction para reforçar como os usuários podem baixar, imprimir e copiar arquivos.

Se você quiser usar o campo booleano copyRequiresWriterPermission, a funcionalidade será diferente para leitura e gravação no campo.

O valor recuperado do campo copyRequiresWriterPermission reflete se os usuários com a permissão role=commenter ou role=reader podem fazer o download, imprimir ou copiar arquivos no Drive. O valor do campo reflete a combinação de configurações de arquivo, configurações de unidade compartilhada ou regras da DLP. No entanto, a avaliação de contexto para regras da DLP não está incluída.

Definir o campo copyRequiresWriterPermission como false atualiza os campos restrictedForWriters e restrictedForReaders para false. Isso significa que as configurações de restrição de download ou cópia são removidas para todos os usuários.

Campos que controlam os recursos de download, impressão e cópia

A tabela a seguir lista os campos de recursos files que afetam a funcionalidade de download, impressão e cópia:

Campo Descrição Versão
capabilities.canCopy Se o usuário atual pode copiar um arquivo. v2 e v3
capabilities.canDownload Se o usuário atual pode baixar um arquivo. v2 e v3
capabilities.canChangeCopyRequiresWriterPermission Se o usuário atual pode mudar a restrição copyRequiresWriterPermission de um arquivo. v2 e v3
capabilities.canChangeItemDownloadRestriction Se o usuário atual pode mudar a restrição de download de um arquivo. Somente v3
copyRequiresWriterPermission Se as opções de copiar, imprimir ou fazer o download deste arquivo devem ser desativadas para leitores e comentaristas. v2 e v3
downloadRestrictions As restrições de download aplicadas a um arquivo. Somente v3