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:
- 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
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 (interface do usuário (IU) do Google Drive. O arquivo agora é 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 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:
No Drive, clique com o botão direito do mouse no arquivo com uma restrição de conteúdo e clique em Desbloquear
.Abra o arquivo com uma restrição de conteúdo e clique em (Modo bloqueado) > Desbloquear arquivo.
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 tem restrição de conteúdo, e apenas os proprietários do arquivo podem removê-lo. Se você for o proprietário do arquivo, um símbolo de trava ativa ( interface do usuário (IU) do Drive. Se você não for o proprietário, o símbolo de cadeado vai estar 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
: indica 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 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
.