Protéger le contenu d'un fichier

L'API Google Drive est compatible avec plusieurs méthodes permettant d'empêcher la modification des fichiers, y compris la restriction du contenu des fichiers et l'interdiction de télécharger, d'imprimer ou de copier des fichiers.

Définir des fichiers en lecture seule avec des 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 le contenu
  • Importer une révision
  • Ajouter ou modifier des commentaires

Une restriction de contenu n'est pas 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 de leur 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 permissions associées. Pour un fichier ou un dossier dans Mon Drive ou un Drive partagé avec capabilities.canModifyEditorContentRestriction, vous devez disposer du role=writer attribué. Pour un fichier ou un dossier dans Mon Drive ou un Drive partagé avec une restriction de contenu ownerRestricted, vous devez être propriétaire du fichier ou disposer du role=organizer. Pour afficher un élément avec une restriction de contenu, les utilisateurs doivent disposer du role=reader ou d'un rôle supérieur. Pour obtenir la liste complète des rôles, consultez Rôles et autorisations. Pour modifier les autorisations d'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 remplace celle existante.

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 :

  • Mettre en pause le travail sur un document collaboratif pendant les périodes d'examen ou d'audit.
  • Définir un élément sur un état finalisé, tel qu'approuvé.
  • Empêcher les modifications lors d'une réunion sensible.
  • Interdire les modifications externes pour les workflows gérés par des systèmes automatisés.
  • Limiter les modifications par Google Apps Script et les modules complémentaires Google Workspace.
  • Éviter les modifications accidentelles d'un document.

Notez toutefois que, bien que les restrictions de contenu puissent vous aider à gérer le contenu, elles ne sont pas destinées à empêcher les utilisateurs disposant des autorisations suffisantes de continuer à travailler sur un élément. De plus, elles ne permettent pas de créer un enregistrement immuable. Les restrictions de contenu Drive sont modifiables. Par conséquent, une restriction de contenu sur un élément ne garantit pas que l'élément ne change jamais.

Gérer les fichiers avec des restrictions de contenu

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

Une restriction de contenu sur un élément empêche la modification de son titre et de son contenu, y compris :

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

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

Ajouter une restriction de contenu

Pour ajouter une restriction de contenu de fichier, utilisez la files.update méthode avec le contentRestrictions.readOnly champ défini sur true. Ajoutez une reason facultative pour expliquer pourquoi vous ajoutez la restriction, par exemple "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 de verrouillage () s'affiche à côté du nom de fichier dans l'interface utilisateur Google Drive (UI). Le fichier est désormais en lecture seule.

Fichier soumis à une restriction de contenu dans une liste de fichiers Drive.
Figure 1. Fichier avec 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 Drive pour supprimer une restriction de contenu et autoriser la modification du contenu (à condition de disposer des autorisations appropriées). Pour ce faire, vous avez deux possibilités :

  1. Dans Drive, cliquez avec le bouton droit sur le fichier avec une restriction de contenu, puis cliquez sur Déverrouiller .

    Supprimez une restriction de contenu de fichier dans une liste de fichiers Drive.
    Figure 2. Supprimer une restriction de contenu de fichier dans une liste de fichiers Drive.
  2. Ouvrez le fichier avec 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. Supprimer une restriction de contenu de fichier dans un document.

Vérifier une restriction de contenu

Pour vérifier une restriction de contenu, utilisez la files.get méthode avec le contentRestrictions champ 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 le fileId du fichier que vous souhaitez vérifier.

Lorsque vous exécutez l'exemple de code, la méthode renvoie une ContentRestriction ressource si elle est présente.

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 de fichiers puissent activer ou désactiver le mécanisme, utilisez la méthode files.update avec le contentRestrictions.ownerRestricted booléen 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 de fichiers peuvent le supprimer. Si vous êtes le propriétaire du fichier, un symbole de verrouillage actif () s'affiche à côté du nom de fichier dans l' interface utilisateur Drive (UI). Si vous n'êtes pas le propriétaire, le symbole de verrouillage est grisé.

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

Fonctionnalités de restriction de contenu

Une ressource files contient une collection de champs booléens capabilities utilisés pour indiquer si une action peut être effectuée sur un fichier.

Les restrictions de contenu contiennent les capabilities suivantes :

  • 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 du propriétaire.
  • capabilities.canRemoveContentRestriction : indique si l'utilisateur actuel peut supprimer la restriction de contenu appliquée (si elle est présente).

Pour en savoir plus, consultez Comprendre les fonctionnalités des fichiers.

Pour obtenir un exemple de récupération des capabilities de fichier, consultez Obtenir les fonctionnalités de fichier.

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

Vous pouvez limiter la façon dont les utilisateurs peuvent télécharger, imprimer et copier des fichiers dans Drive, Docs, Sheets et Slides.

Pour déterminer si l'utilisateur peut modifier les restrictions de téléchargement appliquées par le propriétaire ou l'organisateur d'un fichier, cochez le champ booléen capabilities.canChangeItemDownloadRestriction. Si capabilities.canChangeItemDownloadRestriction est défini sur true, des restrictions de téléchargement peuvent être appliquées au fichier. Pour en savoir plus, consultez Comprendre les fonctionnalités des fichiers.

Pour appliquer des restrictions de téléchargement à un fichier, définissez le downloadRestrictions champ à l'aide de la files.update méthode. Vous pouvez définir le champ à l'aide de l' DownloadRestrictionsMetadata objet.

L'objet DownloadRestrictionsMetadata comporte deux champs : itemDownloadRestriction et effectiveDownloadRestrictionWithContext. Les deux champs sont lisibles, mais seul itemDownloadRestriction peut être défini. Le itemDownloadRestriction champ renvoie un DownloadRestriction objet. L'objet DownloadRestriction comporte deux champs booléens distincts : restrictedForReaders et restrictedForWriters.

Lorsque vous définissez le champ itemDownloadRestriction, la restriction de téléchargement du fichier est appliquée directement par le propriétaire ou l'organisateur. Il ne tient pas compte des paramètres du Drive partagé ni des règles de protection contre la perte de données (DLP). Pour en savoir plus, consultez À propos de la protection contre la perte de données.

Si vous mettez à jour le champ itemDownloadRestriction en définissant le champ restrictedForWriters sur true, cela implique que restrictedForReaders est true. De même, définir restrictedForWriters sur true et restrictedForReaders sur false revient à définir restrictedForWriters et restrictedForReaders sur true.

Pour le champ effectiveDownloadRestrictionWithContext, la restriction de téléchargement est appliquée au fichier et tient compte de tous les paramètres de restriction et des règles de protection contre la perte de données.

Le champ effectiveDownloadRestrictionWithContext peut être défini sur restrictedForWriters ou restrictedForReaders. S'il existe des paramètres de restriction de téléchargement ou de copie pour les rôles correspondants à partir des paramètres de fichier, des paramètres de Drive partagé ou des règles de protection contre la perte de données (y compris ceux avec contexte), la valeur est définie sur true, sinon elle est false.

Rétrocompatibilité.

Nous vous recommandons d'utiliser l'objet DownloadRestriction pour appliquer la façon dont les utilisateurs peuvent télécharger, imprimer et copier des fichiers.

Si vous souhaitez utiliser le copyRequiresWriterPermission champ booléen, la fonctionnalité est différente pour la lecture et l'écriture dans le champ.

La valeur récupérée du champ copyRequiresWriterPermission indique si les utilisateurs disposant de l'autorisation role=commenter ou role=reader peuvent télécharger, imprimer ou copier des fichiers dans Drive. La valeur du champ reflète la combinaison des paramètres de fichier, des paramètres de Drive partagé ou des règles de protection contre la perte de données. Toutefois, l'évaluation du contexte pour les règles de protection contre la perte de données n'est pas incluse.

Définir le champ copyRequiresWriterPermission sur false met à jour les champs restrictedForWriters et restrictedForReaders sur false. Cela signifie que les paramètres de restriction de téléchargement ou de copie sont supprimés pour tous les utilisateurs.

Champs qui contrôlent les fonctionnalités de téléchargement, d'impression et de copie

Le tableau suivant répertorie les champs de ressource files qui affectent les fonctionnalités de téléchargement, d'impression et de copie :

Champ Description Version
capabilities.canCopy Indique si l'utilisateur actuel peut copier un fichier. v2 et v3
capabilities.canDownload Indique si l'utilisateur actuel peut télécharger un fichier. v2 et v3
capabilities.canChangeCopyRequiresWriterPermission Indique si l'utilisateur actuel peut modifier la restriction copyRequiresWriterPermission d'un fichier. v2 et v3
capabilities.canChangeItemDownloadRestriction Indique si l'utilisateur actuel peut modifier la restriction de téléchargement d'un fichier. v3 uniquement
copyRequiresWriterPermission Indique si les options permettant de copier, d'imprimer ou de télécharger ce fichier doivent être désactivées pour les lecteurs et les commentateurs. v2 et v3
downloadRestrictions Restrictions de téléchargement appliquées à un fichier. v3 uniquement