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 fazer o 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
  • Como fazer edições no conteúdo
  • Como fazer upload de uma revisão
  • Adicionar ou modificar comentários

Aplicar restrições de conteúdo é um mecanismo que permite que o conteúdo de um item do Drive seja definido como somente leitura sem mudar as permissões de acesso do item. Isso significa que 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 permissões associadas. Para um arquivo ou pasta no Meu Drive ou em um drive compartilhado com o capabilities.canModifyEditorContentRestriction, é necessário ter o role=writer atribuído. Para um arquivo ou uma pasta no Meu Drive ou em um drive compartilhado com uma restrição de conteúdo ownerRestricted, você precisa ser o proprietário do arquivo ou ter role=organizer. Para acessar um item com restrição de conteúdo, os usuários precisam ter role=reader ou uma versão mais recente. Para conferir uma lista completa de papéis, consulte Papéis e permissões. Para mudar as permissões de um arquivo, consulte Mudar as permissões.

É possível usar 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 atual.

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 pode ser alterado. Isso pode acontecer por alguns motivos:

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

No entanto, embora as restrições de conteúdo possam ajudar a gerenciar o conteúdo, elas não são destinadas a 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 o item 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 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 (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 dos slides, bem como a ordem e o número deles

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 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 abaixo 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 conteúdo do arquivo fica restrito, e um símbolo de cadeado () aparece ao lado do nome do arquivo na interface do usuário (IU) do Google Drive. O arquivo agora é somente leitura.

Um arquivo com restrição de conteúdo em uma lista de arquivos do Drive.
Figura 1. Um arquivo com 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 abaixo 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 código de exemplo, 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 de conteúdo, 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 .

    Remover 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.

    Remover uma restrição de conteúdo de arquivo em um documento.
    Figura 3. Remova 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 abaixo 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 código de exemplo, o método retorna um recurso ContentRestriction se ele estiver presente.

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 de arquivos possam ativar o mecanismo, use o método files.update com o campo booleano contentRestrictions.ownerRestricted definido como true. O exemplo de código abaixo 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 exemplo, o arquivo fica restrito e só os proprietários podem removê-lo. Se você for o proprietário do arquivo, um símbolo de trava ativa () vai aparecer ao lado do nome do arquivo na interface do usuário (IU) do Drive. Se você não for o proprietário, o símbolo de cadeado vai estar desativado.

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 Recursos.

Para conferir um exemplo de como recuperar o arquivo capabilities, consulte Verificar as permissões do usuário.

Impedir que os usuários façam o download, a impressão ou a cópia do arquivo

É possível limitar o download, a impressão e a cópia de arquivos no Drive, nos Documentos, nas Planilhas e nas Apresentações Google para usuários com permissões role=commenter ou role=reader.

Para remover as opções de download, impressão e cópia de arquivos, use o método files.update com o campo booleano copyRequiresWriterPermission definido como true.