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:
- Formulários Google
- Google Sites
- Desenhos Google
- Atalhos e atalhos de terceiros. Para saber mais, consulte Criar um arquivo de atalho para um 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 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 (interface do usuário (IU) do Google Drive. 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ê 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:
No Drive, clique com o botão direito do mouse no arquivo com restrição de conteúdo e clique em Desbloquear
.Abra o arquivo com restrição de conteúdo e clique em (Modo bloqueado) > Desbloquear arquivo.
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 ( interface do usuário (IU) do Drive. Se você não for o proprietário, o símbolo do cadeado ficará esmaecido.
) vai aparecer ao lado do nome do arquivo naPara 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
:
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
: se o usuário atual pode remover a restrição de conteúdo aplicada (se houver).
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
.