Protéger le contenu d'un fichier

L'API Google Drive offre plusieurs moyens d'empêcher la modification des fichiers, y compris la restriction de contenu des fichiers et l'interdiction de télécharger, d'imprimer ou de copier des fichiers.

Mettre des fichiers en lecture seule avec les restrictions de contenu Drive

Vous pouvez ajouter une restriction de contenu à un fichier Google Drive pour empêcher les utilisateurs d'effectuer les opérations suivantes:

  • Modifier le titre
  • Modifier du contenu
  • Importation d'une révision
  • Ajout ou modification de commentaires

L'application de restrictions de contenu est un mécanisme qui permet de rendre le contenu d'un élément Drive en lecture seule sans modifier les autorisations de l'élément. Cela signifie qu'il ne s'agit pas d'une restriction d'accès. Bien que les utilisateurs ne puissent pas modifier le contenu du fichier, d'autres opérations sont toujours autorisées en fonction du niveau d'accès (par exemple, un utilisateur disposant d'un accès en modification peut toujours déplacer un élément ou modifier ses paramètres de partage).

Pour ajouter ou supprimer une restriction de contenu sur un fichier dans Drive, un utilisateur doit disposer des autorisations associées. Pour un fichier ou un dossier dans Mon Drive ou un Drive partagé disposant du rôle capabilities.canModifyEditorContentRestriction, l'autorisation role=writer doit être attribuée. Si un fichier ou un dossier se trouve dans Mon Drive ou dans un Drive partagé dont le contenu est soumis à une restriction de contenu ownerRestricted, vous devez en être le propriétaire ou disposer de l'autorisation role=organizer. Pour afficher un élément avec une restriction de contenu, les utilisateurs doivent disposer du niveau role=reader ou d'un niveau supérieur. Pour obtenir la liste complète des rôles, consultez la section Rôles et autorisations. Pour modifier les autorisations sur un fichier, consultez Modifier les autorisations.

Vous pouvez utiliser le champ booléen contentRestrictions.readOnly sur la ressource files pour définir une restriction de contenu. Notez que la définition d'une restriction de contenu sur un élément écrase l'élément existant.

Scénarios pour les restrictions de contenu

Une restriction de contenu sur un élément Drive indique aux utilisateurs que le contenu ne doit pas être modifié. Cela peut être dû aux raisons suivantes:

  • Mise en pause d'un travail sur un document collaboratif au cours des périodes d'examen ou d'audit
  • Attribuer un état finalisé à un élément (par exemple, "Approuvé")
  • Empêcher les modifications pendant une réunion sensible
  • Interdiction des modifications externes pour les flux de travail gérés par des systèmes automatisés
  • Restreindre les modifications via Google Apps Script et les modules complémentaires Google Workspace.
  • Évitez les modifications accidentelles dans un document.

Notez toutefois que bien que les restrictions de contenu puissent vous aider à gérer le contenu, elles ne visent pas à empêcher les utilisateurs disposant des autorisations suffisantes de continuer à travailler sur un élément. De plus, cela ne permet pas de créer un enregistrement immuable. Les restrictions de contenu Drive sont modifiables. Ainsi, une restriction de contenu appliquée à un élément ne garantit pas qu'il ne sera jamais modifié.

Gérer les fichiers avec des restrictions de contenu

Google Docs, Google Sheets et Google Slides, ainsi que tous les autres fichiers, peuvent comporter des restrictions de contenu.

Une restriction de contenu appliquée à un élément empêche toute modification de son titre et de son contenu, par exemple:

  • les commentaires et suggestions (sur Docs, Sheets, Slides et les fichiers binaires) ;
  • Révisions d'un fichier binaire
  • Texte et mise en forme dans Docs
  • Du texte ou des formules dans Sheets, une mise en page Sheets et des instances dans Sheets
  • L'ensemble du contenu de Slides, ainsi que l'ordre et le nombre de diapositives

Certains types de fichiers ne peuvent pas comporter de restriction de contenu. Voici quelques exemples :

Ajouter une restriction de contenu

Pour ajouter une restriction de contenu de fichier, utilisez la méthode files.update avec le champ contentRestrictions.readOnly défini sur true. Ajoutez un élément reason facultatif pour indiquer la raison pour laquelle vous ajoutez cette restriction, telle que "Contrat finalisé". L'exemple de code suivant montre comment ajouter une restriction de contenu:

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;
  }
}

Remplacez FILE_ID par le fileId du fichier que vous souhaitez modifier.

Lorsque vous exécutez l'exemple de code, le contenu du fichier est limité et un symbole en forme de cadenas () apparaît à côté du nom du fichier dans l'interface utilisateur de Google Drive. Le fichier est désormais en lecture seule.

Fichier contenant une restriction de contenu dans une liste de fichiers Drive.
Figure 1 : Fichier contenant une restriction de contenu dans une liste de fichiers Drive.

Supprimer une restriction de contenu

Pour supprimer une restriction de contenu de fichier, utilisez la méthode files.update avec le champ contentRestrictions.readOnly défini sur false. L'exemple de code suivant montre comment supprimer une restriction de contenu:

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;
  }
}

Remplacez FILE_ID par le fileId du fichier que vous souhaitez modifier.

Lorsque vous exécutez l'exemple de code, le contenu du fichier n'est plus limité.

Vous pouvez également utiliser l'interface utilisateur de Drive pour supprimer une restriction de contenu et autoriser la modification du contenu (à condition que vous disposiez des autorisations appropriées). Pour ce faire, vous disposez de deux options:

  1. Dans Drive, effectuez un clic droit sur le fichier comportant une restriction de contenu, puis cliquez sur Unlock (Déverrouiller).

    Supprimez une restriction de contenu de fichier dans une liste de fichiers Drive.
    Figure 2. Supprimez une restriction de contenu de fichier dans une liste de fichiers Drive.
  2. Ouvrez le fichier comportant une restriction de contenu, puis cliquez sur (Mode verrouillé) > Déverrouiller le fichier.

    Supprimez une restriction de contenu de fichier dans un document.
    Figure 3. Supprimez une restriction de contenu de fichier dans un document.

Vérifier s'il existe une restriction de contenu

Pour vérifier une restriction de contenu, utilisez la méthode files.get avec le champ contentRestrictions renvoyé. L'exemple de code suivant montre comment vérifier l'état d'une restriction de contenu:

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;
  }
}

Remplacez FILE_ID par l'fileId du fichier que vous souhaitez vérifier.

Lorsque vous exécutez l'exemple de code, la méthode renvoie une ressource ContentRestriction, le cas échéant.

Ajouter une restriction de contenu que seul le propriétaire du fichier peut modifier

Pour ajouter une restriction de contenu de fichier afin que seuls les propriétaires des fichiers puissent activer/désactiver le mécanisme, utilisez la méthode files.update avec le champ booléen contentRestrictions.ownerRestricted défini sur true. L'exemple de code suivant montre comment ajouter une restriction de contenu pour les propriétaires de fichiers uniquement:

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;
  }
}

Remplacez FILE_ID par le fileId du fichier que vous souhaitez modifier.

Lorsque vous exécutez l'exemple de code, le contenu du fichier est limité et seuls les propriétaires peuvent le supprimer. Si vous êtes le propriétaire du fichier, un symbole en forme de cadenas actif () apparaît à côté du nom du fichier dans l' interface utilisateur de Drive. Si vous n'êtes pas le propriétaire, le symbole en forme de cadenas est grisé.

Pour supprimer l'option ownerRestricted, utilisez la méthode files.update avec le champ contentRestrictions.ownerRestricted défini sur false.

Fonctionnalités de restriction de contenu

Une ressource files contient un ensemble de champs booléens capabilities permettant d'indiquer si une action peut être effectuée sur un fichier.

Les restrictions de contenu incluent les capabilities suivants:

  • capabilities.canModifyEditorContentRestriction: indique si l'utilisateur actuel peut ajouter ou modifier une restriction de contenu.
  • capabilities.canModifyOwnerContentRestriction: indique si l'utilisateur actuel peut ajouter ou modifier une restriction de contenu propriétaire.
  • capabilities.canRemoveContentRestriction: indique si l'utilisateur actuel peut supprimer la restriction de contenu appliquée (le cas échéant).

Pour en savoir plus, consultez la section Fonctionnalités.

Pour obtenir un exemple de récupération du fichier capabilities, consultez Vérifier les autorisations des utilisateurs.

Empêcher les utilisateurs de télécharger, d'imprimer ou de copier votre fichier

Vous pouvez limiter la façon dont les utilisateurs disposant des autorisations role=commenter ou role=reader peuvent télécharger, imprimer et copier des fichiers dans Drive, Docs, Sheets et Slides.

Pour supprimer les options de téléchargement, d'impression et de copie de fichiers, utilisez la méthode files.update avec le champ booléen copyRequiresWriterPermission défini sur true.