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 limité. Il est donc difficile de savoir qui a accès à la hiérarchie.

À l'inverse, les fichiers d'un Drive partagé appartiennent au Drive partagé. Les Drive partagés ont 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é reproduit le modèle d'accès étendu des Drive partagés à Mon Drive. Avec ce changement, les dossiers en accès limité sont la seule exception permettant 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 en accès étendu dans Google Drive.

À propos des dossiers en accès limité

Limitez les dossiers à des utilisateurs spécifiques.

Les dossiers en accès limité vous permettent de limiter l'accès à 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 un accès à partir d'un dossier parent) peuvent voir le dossier en accès limité dans Drive, mais ne peuvent pas l'ouvrir. Cette fonctionnalité aligne mieux le comportement de partage des éléments dans Mon Drive et les Drive partagés, ce qui vous permet d'organiser des dossiers contenant du contenu sensible à côté de contenus plus largement partagés.

Les dossiers en accès limité sont disponibles à la fois dans Mon Drive et dans les Drive partagés. Le rôle owner dans Mon Drive et le rôle organizer dans les Drive partagés peuvent toujours accéder aux dossiers en accès limité. Aucune autorisation particulière n'est requise pour modifier la liste des utilisateurs d'un dossier. 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 les pages Rôles et autorisations et Présentation des disques partagés.

Notez que même si les dossiers sont un type de fichier, l'accès limité n'est pas disponible pour les fichiers.

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

Bien que les utilisateurs disposant d'autorisations directes pour les dossiers puissent accéder à un dossier en accès limité, seul le rôle owner dans Mon Drive et le 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 défini le champ booléen writersCanShare de la ressource files sur true, il peut également activer ou désactiver cette fonctionnalité.

Pour limiter l'accès à un dossier, définissez le champ booléen inheritedPermissionsDisabled de la ressource files sur true. Lorsque l'attribut est true, seuls le rôle owner, le rôle organizer et les utilisateurs disposant d'autorisations de dossier directes 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 confirment 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 sous-dossiers 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 metadata du dossier à l'aide des méthodes files.get() et files.list(). Pour vérifier que l'accès est limité, vérifiez le corps de la réponse pour voir 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 metadata des dossiers si vous n'avez pas accès au contenu des dossiers.

Lorsque vous utilisez la ressource permissions pour déterminer l'accès d'un utilisateur, les dossiers Mon Drive et Drive partagé qui n'autorisent que l'accès aux métadonnées contiennent les valeurs suivantes dans le corps de la réponse: inheritedPermissionsDisabled=true et view=metadata. 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 la section Vues.

Pour toutes les entrées du champ permissionDetails, le champ inherited est défini sur true pour indiquer que l'autorisation est héritée et qu'aucun accès direct au contenu du dossier n'a é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 supérieur.

Enfin, si une autorisation a d'abord été limitée en désactivant l'héritage sur un dossier (inheritedPermissionsDisabled=true), puis que l'autorisation a été ajoutée directement au dossier, les valeurs du corps de la réponse deviennent inheritedPermissionsDisabled=true, le champ view n'étant pas défini. Si le dossier se trouve dans un Drive partagé, la liste permissionDetails contient une entrée dont le champ inherited est défini sur false pour indiquer que l'autorisation n'est pas héritée. Cette autorisation permet d'accéder au contenu et aux métadonnées du dossier, 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, l'intégralité de 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 leur ajout en tant que fileOrganizer sur les dossiers en accès limité. Si c'est le cas, l'ensemble de la hiérarchie est supprimé. 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é élargit le modèle d'accès étendu des Drive partagés à Mon Drive. Une fois le modèle d'accès déployé, l'accès à un dossier implique 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 limiter l'accès à un sous-dossier spécifique dans Mon Drive et les Drive partagés. Cela signifie également que, sauf si votre dossier est en accès limité, vous ne pouvez plus supprimer l'accès hérité du dossier parent. L'API Drive renvoie alors une réponse d'erreur. Pour définir un contrôle des accès plus précis dans une hiérarchie, vous pouvez définir un accès limité au dossier.

S'adapter à l'accès étendu

Pour permettre aux développeurs de s'adapter plus facilement à 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 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 (tels que reader) sont hérités du parent et si un rôle supérieur (tel que writer) est accordé directement à l'élément.

    Lorsque vous consultez les autorisations d'un élément, le champ permissionDetails[] peut contenir plusieurs entrées. Le cas échéant, une entrée est associée à l'autorisation directement sur l'élément pour cette portée, puis des entrées pour les autorisations héritées ou les autorisations des membres sur l'élément.

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

    L'activation de cette fonctionnalité signifie que l'API fonctionne de la même manière pour les éléments de My 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 limité

Votre application peut créer un accès limité (lorsque l'utilisateur a accès au dossier Mon Drive parent, mais pas à un fichier de ce dossier) sur 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 limité et éviter d'envoyer de telles requêtes. Pour détecter cette situation, utilisez le champ enforceExpansiveAccess dans votre requête.

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 définir un accès limité au dossier.

  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 de Mon Drive). Vous pouvez ensuite créer un raccourci vers l'emplacement d'origine de l'élément afin que les utilisateurs puissent toujours l'utiliser.