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:
- Formulários Google
- Google Sites
- Desenhos Google
- Atalhos e atalhos de terceiros. Para mais informações, consulte Criar um arquivo de atalho para conteúdo armazenado pelo seu app e Criar um atalho para um arquivo do Drive.
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 (interface do usuário do Google Drive (UI). Agora o arquivo é somente leitura.
) aparece ao lado do nome do arquivo naRemover 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:
No Drive, clique com o botão direito do mouse no arquivo com uma restrição de conteúdo e clique em Desbloquear
.Figura 2. Remova uma restrição de conteúdo de arquivo em uma lista de arquivos do Drive. Abra o arquivo com uma restrição de conteúdo e clique em (Modo bloqueado) > Desbloquear arquivo.
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 ( interface do usuário (UI) do Drive. Se você não for o proprietário, o símbolo de bloqueio vai aparecer esmaecido.
) vai aparecer ao lado do nome do arquivo naPara 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
:
capabilities.canModifyEditorContentRestriction
: se o usuário atual pode adicionar ou modificar uma restrição de conteúdo.capabilities.canModifyOwnerContentRestriction
: 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 houver).
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 |