Gérer les dossiers en accès limité et étendu

Un utilisateur est propriétaire d'un dossier Mon Drive. Le dossier peut contenir plusieurs utilisateurs ayant accès à différents fichiers. Ce modèle d'accès restrictif signifie que différents utilisateurs peuvent voir différentes listes d'éléments dans le même dossier. Un utilisateur ayant accès au dossier parent "Mon Drive", mais pas à un élément de ce dossier, dispose d'un "accès restreint". Il est alors difficile de savoir qui a accès à quoi dans la hiérarchie.

À l'inverse, les fichiers d'un Drive partagé appartiennent au Drive partagé. Les Drive partagés disposent d'un modèle étendu, de sorte que chaque utilisateur dispose de la même liste d'éléments dans le même dossier.

L'introduction des dossiers en accès limité réplique le modèle d'accès étendu des Drive partagés dans Mon Drive. Avec ce changement, les dossiers en accès limité sont la seule exception qui permet de limiter l'accès à un sous-dossier spécifique dans Mon Drive et les Drive partagés.

Ce guide explique comment gérer les dossiers en accès limité et étendu dans Google Drive.

À propos des dossiers en accès limité

Limitez l'accès aux dossiers à des utilisateurs spécifiques.

Les dossiers en accès limité vous permettent de restreindre l'accès à des dossiers à des utilisateurs spécifiques. Seuls les utilisateurs que vous ajoutez directement aux autorisations du dossier peuvent l'ouvrir et accéder à son contenu. Les utilisateurs disposant d'un accès hérité au dossier Mon Drive partagé ou au dossier Drive partagé (via l'accès à un dossier parent) peuvent voir le dossier en accès limité dans Drive, mais ne peuvent pas l'ouvrir. Cette fonctionnalité permet d'harmoniser le comportement de partage des éléments dans "Mon Drive" et les Drive partagés. Vous pouvez ainsi organiser des dossiers contenant des contenus sensibles à côté de contenus partagés plus largement.

Les dossiers en accès limité sont disponibles à la fois dans Mon Drive et dans les Drive partagés. Les utilisateurs disposant du rôle owner dans Mon Drive et du rôle organizer dans les Drive partagés peuvent toujours accéder aux dossiers en accès limité. Pour modifier la liste des utilisateurs d'un dossier, aucune autorisation spéciale n'est requise. Les rôles qui peuvent partager des dossiers peuvent mettre à jour les listes de membres. Pour en savoir plus sur les rôles et les autorisations, consultez Rôles et autorisations et Présentation des lecteurs partagés.

Notez que, bien que les dossiers soient un type de fichier, l'accès limité n'est pas disponible pour les fichiers.

Définir un accès limité à un dossier

Les utilisateurs disposant d'autorisations directes sur un dossier peuvent accéder à un dossier en accès limité, mais seuls les utilisateurs disposant du rôle owner dans Mon Drive et du rôle organizer dans les Drive partagés peuvent activer ou désactiver l'accès limité.

De plus, si un utilisateur disposant du rôle writer dans Mon Drive a la valeur true définie pour le champ booléen writersCanShare sur la ressource files, il peut également activer ou désactiver la fonctionnalité.

Pour limiter l'accès à un dossier, définissez le champ booléen inheritedPermissionsDisabled de la ressource files sur true. Lorsque true, seuls le rôle owner, le rôle organizer et les utilisateurs disposant d'autorisations directes sur le dossier peuvent y accéder.

Pour réactiver les autorisations héritées, définissez inheritedPermissionsDisabled sur false.

Vérifier l'autorisation de limiter l'accès à un dossier

Pour vérifier si vous pouvez limiter l'accès à un dossier, inspectez les valeurs booléennes des champs capabilities.canDisableInheritedPermissions et capabilities.canEnableInheritedPermissions de la ressource files. Ces paramètres permettent de vérifier si vous êtes autorisé à limiter l'accès à un dossier via le champ inheritedPermissionsDisabled.

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

Lister les enfants d'un dossier en accès limité

Pour vérifier si vous pouvez lister les enfants d'un dossier, utilisez le champ booléen capabilities.canListChildren.

La valeur renvoyée est toujours false lorsque l'élément n'est pas un dossier ou si l'accès du demandeur au contenu du dossier a été supprimé en définissant inheritedPermissionsDisabled sur false.

Si votre accès au contenu du dossier a été supprimé, vous pouvez toujours accéder aux métadonnées du dossier avec les méthodes files.get() et files.list(). Pour confirmer que l'accès est limité, vérifiez dans le corps de la réponse si l'élément est un dossier avec le type MIME application/vnd.google-apps.folder et si le champ capabilities.canListChildren est défini sur "false". Si vous essayez de lister les enfants d'un tel dossier, le résultat est toujours vide.

Accéder aux métadonnées d'un dossier en accès limité

Les dossiers en accès limité vous permettent d'afficher les métadonnées des dossiers si vous n'avez pas accès à leur contenu.

Lorsque vous utilisez la ressource permissions pour déterminer l'accès d'un utilisateur, les dossiers Mon Drive et Drive partagé qui n'accordent l'accès qu'aux métadonnées contiennent les valeurs inheritedPermissionsDisabled=true et view=metadata dans le corps de la réponse. Le rôle est toujours défini sur reader. Le champ view n'est renseigné que pour les autorisations appartenant à un view. Pour en savoir plus, consultez Vues.

Toutes les entrées du champ permissionDetails ont le champ inherited défini sur true pour indiquer que l'autorisation est héritée et que l'accès direct au contenu du dossier n'a pas été accordé.

Pour accorder l'accès au contenu et aux métadonnées du dossier, définissez le champ inheritedPermissionsDisabled sur false ou mettez à jour le rôle sur reader ou un rôle supérieur.

Enfin, si une autorisation a d'abord été limitée en désactivant l'héritage sur un dossier (inheritedPermissionsDisabled=true), puis a été ajoutée directement au dossier, les valeurs dans le corps de la réponse deviennent inheritedPermissionsDisabled=true avec le champ view non défini. Si le dossier se trouve dans un Drive partagé, la liste permissionDetails comporte une entrée avec le champ inherited défini sur false pour indiquer que l'autorisation n'est pas héritée. Cette autorisation donne accès au contenu du dossier et aux métadonnées, comme toute autre autorisation.

Supprimer des dossiers en accès limité

Vous pouvez supprimer des dossiers en accès limité à l'aide de la méthode files.delete() sur la ressource files.

Dans Mon Drive, seul le propriétaire de l'élément peut supprimer une hiérarchie de dossiers. Si un utilisateur supprime une hiérarchie contenant des dossiers en accès limité qui appartiennent à d'autres utilisateurs, ces dossiers sont déplacés vers le dossier Mon Drive du propriétaire.

Si l'utilisateur dispose du rôle owner, toute la hiérarchie est supprimée.

Dans les Drive partagés, le rôle organizer peut supprimer des hiérarchies, même si elles contiennent des dossiers en accès limité. Si le rôle fileOrganizer supprime une hiérarchie contenant des dossiers en accès limité, le résultat dépend de la façon dont il a été ajouté en tant que fileOrganizer aux dossiers en accès limité. Si c'était le cas, toute la hiérarchie serait supprimée. Sinon, les dossiers en accès limité sont déplacés vers le dossier racine du Drive partagé.

À propos de l'accès étendu

L'introduction des dossiers en accès limité étend le modèle d'accès étendu des Drive partagés à Mon Drive. Une fois le modèle d'accès déployé, avoir accès à un dossier signifie avoir au moins le même niveau d'accès à tout ce qui se trouve dans cette hiérarchie de dossiers. Les dossiers en accès limité sont la seule exception qui permet de restreindre l'accès à un sous-dossier spécifique dans Mon Drive et les Drive partagés. Cela signifie également que, sauf si l'accès à votre dossier est limité, vous ne pouvez plus supprimer l'accès hérité du dossier parent. Dans ce cas, l'API Drive renvoie une réponse d'erreur. Pour définir un contrôle d'accès plus précis dans une hiérarchie, vous pouvez définir un accès limité au dossier.

S'adapter à un accès étendu

Pour aider les développeurs à s'adapter à l'accès étendu, plusieurs améliorations ont été apportées à l'API Google Drive :

  1. Le champ permissionDetails[] de la ressource permissions est désormais renseigné pour les éléments de Mon Drive. Auparavant, les champs n'étaient pas définis ou étaient répliqués à partir du champ teamDrivePermissionDetails, le cas échéant. Seuls les champs permissionType et inherited de Mon Drive sont renseignés.

    Le champ permissionDetails[].inherited indique si une autorisation est héritée du parent de l'élément. Il vous permet de détecter si certains rôles (comme reader) sont hérités du parent et si un rôle de niveau supérieur (comme writer) est accordé directement sur l'élément.

    Lorsque vous consultez les autorisations d'un élément, le champ permissionDetails[] peut contenir plusieurs entrées. Si elle est présente, il existe une entrée pour l'autorisation directement sur l'élément pour cette portée, puis des entrées pour les autorisations héritées ou de membre sur l'élément.

  2. Les développeurs peuvent activer le comportement de l'API d'accès étendu dans Mon Drive avant toute application obligatoire future. Vous pouvez définir le paramètre de requête enforceExpansiveAccess sur true pour que les futures modifications de l'accès étendu n'affectent pas votre application.

    Si vous activez cette option maintenant, l'API fonctionnera de la même manière pour les éléments de Mon Drive que pour ceux des Drive partagés. Par exemple, toute tentative de restriction de l'accès en dessous du rôle hérité échoue lors de l'appel de permissions.update(). De même, un appel à permissions.delete() échoue si l'autorisation est héritée.

Détecter et empêcher l'accès restreint

Votre application peut créer un accès limité (où un utilisateur a accès au dossier parent "Mon Drive", mais pas à un fichier de ce dossier) à vos dossiers "Mon Drive" lorsque vous utilisez les méthodes permissions.update() ou permissions.delete().

Lorsque vous utilisez ces méthodes, vous pouvez examiner les champs de la ressource permissions pour voir où une requête peut créer un accès restreint et éviter d'envoyer de telles requêtes. Pour détecter cette situation, utilisez le champ enforceExpansiveAccess dans votre demande.

De plus, si votre application a déjà créé un accès limité à vos dossiers, vous pouvez procéder comme suit :

  1. Parcourez la hiérarchie des dossiers pour supprimer l'accès limité. À la place, vous devez configurer un accès limité aux dossiers.

  2. Si l'élément que vous essayez de ne plus partager est un fichier, vous pouvez créer un dossier intermédiaire, définir un accès limité et y déplacer le fichier.

  3. Si vous ne souhaitez pas utiliser de dossiers en accès limité, mais que vous devez supprimer certains accès, vous pouvez déplacer le fichier vers un dossier privé (tel que le dossier racine "Mon Drive"). Vous pouvez ensuite créer un raccourci vers l'emplacement d'origine de l'élément pour que les utilisateurs puissent continuer à l'utiliser.