Proteger o conteúdo do arquivo

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

Tornar arquivos somente leitura com 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:

  • Modificar o título
  • Fazer edições de conteúdo
  • 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.

Para adicionar ou remover uma restrição de conteúdo em um arquivo no Drive, o usuário precisa ter as permissions associadas. Para um arquivo ou pasta no Meu Drive ou em um drive compartilhado com capabilities.canModifyEditorContentRestriction, é necessário 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, é necessário ser o proprietário do arquivo ou ter role=organizer. Para visualizar um item com uma restrição de conteúdo, os usuários precisam ter role=reader ou um nível mais alto. Para conferir uma lista completa de papéis, consulte Papéis e permissões. Para atualizar as permissões de um arquivo, consulte Atualizar permissões.

É possível usar o campo booleano contentRestrictions.readOnly no recurso files para definir uma restrição de conteúdo. A definição de uma restrição de conteúdo em um item substitui a 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 ocorrer por alguns dos seguintes motivos:

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

Embora as restrições de conteúdo possam ajudar 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 de conteúdo em um item não garante que ele nunca mude.

Gerenciar arquivos com restrições de conteúdo

O Google Docs, o Google Sheets e o Google Slides, assim como todos os outros arquivos, podem conter restrições de conteúdo.

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

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

Alguns tipos de arquivo não podem conter 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 files.update método com o contentRestrictions.readOnly campo 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 exemplo de código, o arquivo tem restrição de conteúdo e um símbolo de bloqueio () aparece ao lado do nome do arquivo em a 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.

Também é possível usar a interface do Drive para remover uma restrição de conteúdo e permitir a edição de conteúdo (desde que você 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. Remover 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. Remover uma restrição de conteúdo de arquivo em um documento.

Verificar uma restrição de conteúdo

Para verificar uma restrição de conteúdo, use o files.get método com o contentRestrictions campo 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.

Quando você executa o exemplo de código, o método retorna um ContentRestriction recurso, se presente.

Adicionar uma restrição de conteúdo que apenas 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 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 exemplo de código, o arquivo tem restrição de conteúdo e apenas 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 do Drive (UI). 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 contentRestrictions.ownerRestricted campo 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 os seguintes capabilities:

  • capabilities.canModifyEditorContentRestriction: indica se o usuário atual pode adicionar ou modificar uma restrição de conteúdo.
  • capabilities.canModifyOwnerContentRestriction: indica se o usuário atual pode adicionar ou modificar uma restrição de conteúdo do proprietário.
  • capabilities.canRemoveContentRestriction: indica se o usuário atual pode remover a restrição de conteúdo aplicada (se presente).

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

Para um exemplo de como recuperar arquivos capabilities, consulte Receber recursos de arquivos.

Impedir que os usuários façam o download, imprimam ou copiem seu arquivo

É possível limitar como os usuários podem fazer o download, imprimir e copiar arquivos no Drive, no Documentos, no Planilhas e no Slides.

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

Para aplicar restrições de download a um arquivo, defina o downloadRestrictions campo usando o files.update método. É possível definir o campo usando o DownloadRestrictionsMetadata objeto.

O objeto DownloadRestrictionsMetadata tem dois campos: itemDownloadRestriction e effectiveDownloadRestrictionWithContext. Os dois campos são legíveis, mas apenas o itemDownloadRestriction pode ser definido. O itemDownloadRestriction campo retorna um DownloadRestriction objeto. 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. Ele não considera as configurações de drive compartilhado ou 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 implica que restrictedForReaders é true. Da mesma forma, definir restrictedForWriters como true e restrictedForReaders como false é equivalente 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 os papéis 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 o uso do DownloadRestriction objeto para aplicar como os usuários podem fazer o download, imprimir e copiar arquivos.

Se você quiser usar o copyRequiresWriterPermission campo booleano, 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 drive compartilhado ou regras de DLP. No entanto, a avaliação de contexto para regras de 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 Indica se o usuário atual pode copiar um arquivo. v2 e v3
capabilities.canDownload Indica se o usuário atual pode fazer o download de um arquivo. v2 e v3
capabilities.canChangeCopyRequiresWriterPermission Indica se o usuário atual pode mudar a restrição copyRequiresWriterPermission de um arquivo. v2 e v3
capabilities.canChangeItemDownloadRestriction Indica se o usuário atual pode mudar a restrição de download de um arquivo. Somente v3
copyRequiresWriterPermission Indica se as opções de copiar, imprimir ou fazer o download desse arquivo precisam ser desativadas para leitores e comentadores. v2 e v3
downloadRestrictions As restrições de download aplicadas a um arquivo. Somente v3