Présentation du module Protected file sur Drupal 8

Cadenas sur un grillage

Drupal 8 dispose de plusieurs solutions et méthodes pour gérer les droits accès sur chacun des éléments inclus dans un contenu, et ceci de manière très granulaire. Permettre l'accès en visualisation ou modification d'un certain champs inclus dans un type de contenu peut se réaliser très simplement, que ce soit avec quelques lignes de code, ou encore avec le module Field permissions. Nous pouvons utiliser ce module pour autoriser certains rôles à pouvoir visualiser ou mettre à jour un champ particulier.

La problématique concernant le cas de documents associés à un contenu est légèrement différente. On peut vouloir laisser les droits de consultation d'un document ou fichier attaché (via un champ File) à un contenu tout en contrôlant les droits pour pouvoir télécharger ce document. Autrement dit, il s'agit de pouvoir gérer les droits de téléchargement d'un fichier tout en permettant sa visualisation.

C'est à cette problématique que répond le module Protected file. Ce module permet de définir pour chaque fichier attaché, si le téléchargement de celui-ci est accessible publiquement ou s'il nécessite un rôle particulier. Dans le cas d'un fichier protégé, le module présente alors un lien alternatif (configurable, comme par exemple le lien vers la page d'authentification) en lieu et place du lien de téléchargement.

Découvrons ce module.

Pré-requis pour l'installation du module

Afin de pouvoir contrôler les accès aux fichiers, ce module ne peut fonctionner que si le site dispose d'un système de fichiers privé configuré. En effet les fichiers stockés sur le système de fichiers public de Drupal sont accessibles directement depuis le serveur Web, et par conséquent Drupal ne peut contrôler les droits d'accès à ces fichiers. Pour cette raison, si vous ne disposez pas d'un système de fichiers privé configuré, vous ne pourrez pas installer le module. Même si le niveau de sécurité requis n'est très important, puisque les fichiers a priori ne sont pas confidentiels (ils restent téléchargeables sous condition), afin de garantir le fonctionnement et la sécurité des fichiers protégés, le module force l'utilisation du système de fichiers privé pour les champs de type Protected file.

Utilisation du module

Le module Protected file fournit un nouveau type de champ intitulé... Protected file. Ce nouveau type de champ étend le type de champ File fourni par le coeur de Drupal et est quasiment similaire en terme de configuration. Pour activer le contrôle d'accès aux téléchargements des fichiers, il nous faut donc ajouter un nouveau champ sur notre contenu.

Configuration du champ Protected file

Ajoutons un champ Protected file à notre type de contenu Article.

Ajour du champ

 

Et nous pouvons configurer ses paramètres de stockage.

Paramètres de stockage du champ

Nous notons que le système de fichier privé est automatiquement sélectionné et verrouillé. Nous configurons le champ pour pouvoir charger un nombre illimité de fichiers.

Puis nous configurons les paramètres de l'instance de ce champ propre au type de contenu Article sur lequel nous l'avons créé

Paramètres du champ

Nous configurons les différents paramètres, identiques à ceux d'un type de champ File classique (extensions autorisées, répertoire de téléversement, taille maximum des fichiers, etc).

Configuration des paramètres d'affichage du champ Protected file

Nous configurons les paramètres d'affichage de notre nouveau champ.

Paramètres d'affichage du champ

Nous disposons de plusieurs options. Nous pouvons :

  • Choisir d'ouvrir le fichier dans une nouvelle fenêtre ou non
  • Configurer l'url qui remplacera l'url de téléchargement du fichier si l'utilisateur ne dispose pas des droits d'accès suffisants.
  • Choisir d'ouvrir l'url précédemment définie dans une fenêtre modale, ou non
  • Paramétrer le message qui alimentera la balise title du lien paramétré ci-dessus. Ce message est fourni en tant que variable au template chargé de rendre les liens et peut donc être affiché directement avec une simple surcharge du template au niveau du thème

Configuration des permissions

Il ne reste plus qu'à paramétrer les permissions selon vos besoins.

Permissions protected file

Et la configuration est terminée. Nous pouvons maintenant publier des contenus et leur associer des documents, protégés ou non.

Activation de la protection contre le téléchargement

L'usage est simple. Dans le formulaire de création / édition du contenu, nous pouvons pour chaque fichier téléversé activer ou non cette protection, en cochant la case correspondante.

Formulaire d'ajout des fichiers

Et avec comme résultat, pour un utilisateur authentifié, l'accès aux liens de téléchargement des fichiers.

Fichiers protégés téléchargeables

Et pour les visiteurs anonymes

Fichiers protégés

Dans cet exemple ci-dessus, le lien de téléchargement du fichier PDF example 1 a été remplacée par l'url que nous avons défini dans les paramètres d'affichage (/user/login). Et un clic sur le fichier protégé nous ouvre une fenêtre modale sur cette page.

Fenêtre modal de login

Vous souhaitez engager vos visiteurs avec le téléchargement de certaines ressources ? Nul besoin ici d'un développeur Drupal 8, sauf si bien sûr vous avez des besoins plus poussés ou différents qui pourraient nécessiter des évolutions. Pensez au module Protected file. C'est à ce besoin initial qu'il s'adresse en permettant aux éditeurs de contrôler simplement les accès aux documents mis à disposition.

A noter que les liens directs de téléchargement, envoyés par mail par exemple par un utilisateur authentifié, sont bien entendus également contrôlés et nécessitent les mêmes droits d'accès.

 

Commentaires

Soumis par olivier (non vérifié) le 22/02/2017 à 11:54 - Permalien

Merci, pour votre article et pour le module.
Ca fonctionne très bien, mais est ce qu'il serait possible de donner des droits particuliers par role et par document.
Par ex : permettre qu'au administrateur d'accéder à un doc, alors que le doc suivant serait accéssible à tous les utilisateurs connectés?

D'avance merci

Bonjour, je n'ai pas eu ce besoin particulier. Donc pour l'instant cette granularité n'est pas disponible, mais vous pouvez toujours faire une feature request dans la issue queue du module.

Ajouter un commentaire