Proteger o conteúdo do arquivo

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

Tornar os arquivos somente leitura com as restrições de conteúdo do Drive

Você pode 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 editar o conteúdo
  • Como fazer upload de uma revisão
  • Adicionar ou modificar comentários

A aplicação de restrições de conteúdo é um mecanismo que permite que o conteúdo de um item do Drive seja 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 para editar 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 as permissões associadas. Para um arquivo ou uma pasta no Meu Drive ou em um drive compartilhado com capabilities.canModifyEditorContentRestriction, é necessário ter role=writer atribuído. Para um arquivo ou uma pasta no Meu Drive ou em um drive compartilhado com restrição de conteúdo ownerRestricted, você precisa ser o proprietário do arquivo ou ter role=organizer. Para conferir um item com restrição de conteúdo, os usuários precisam ter role=reader ou mais recente. Para uma lista completa de papéis, consulte Papéis e permissões. Para alterar as permissões em um arquivo, consulte Alterar 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 existente.

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

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

  • Pausar o trabalho em um documento colaborativo durante os períodos de revisão ou auditoria.
  • Definir um item para um estado finalizado, como aprovado.
  • Impedir alterações durante uma reunião confidencial.
  • Proibir mudanças externas em fluxos de trabalho gerenciados 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 servem 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

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 (em Documentos, Planilhas, Apresentações e arquivos binários)
  • 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 das Apresentações, bem como a ordem e o número de slides

Certos tipos de arquivo não podem ter 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 o motivo da inclusão da 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 conteúdo do arquivo fica restrito, e um símbolo de bloqueio () aparece ao lado do nome do arquivo na interface do usuário (IU) do Google Drive. Agora, o arquivo é somente leitura.

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 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ê executar o exemplo de código, o conteúdo do arquivo não será mais restrito.

Você também pode usar a IU do Drive para remover uma restrição 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 restrição de conteúdo e clique em Desbloquear .

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

    Remover uma restrição de conteúdo de um documento
    Figura 3. Remova uma restrição de conteúdo de arquivos de um documento.

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

Para verificar se há uma restrição de conteúdo, use o método files.get com o campo retornado contentRestrictions. 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 código de amostra, o método retorna um recurso ContentRestriction, se 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 de modo que apenas os proprietários de arquivos possam ativar ou 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 conteúdo do arquivo fica restrito, e apenas os proprietários dele podem removê-lo. Se você é o proprietário do arquivo, um símbolo de bloqueio ativo () 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 do cadeado ficará esmaecido.

Para remover a sinalização 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 um conjunto de campos booleanos capabilities usados para indicar se uma ação pode ser realizada em um arquivo.

As restrições de conteúdo têm o seguinte capabilities:

Para mais informações, consulte Recursos.

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

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

É possível limitar a forma como os usuários com permissões role=commenter ou role=reader podem fazer o download, imprimir e copiar arquivos no Drive, Documentos, Planilhas e Apresentações.

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.