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