Drupal 10 : Gestion des droits utilisateurs basée sur l’appartenance à une entreprise

Introduction

Dans les projets Drupal orientés vers une utilisation en entreprise, la gestion des accès aux contenus est essentielle pour assurer la confidentialité et la sécurité des informations internes. En particulier, il est souvent indispensable de restreindre l’accès aux contenus en fonction de l’appartenance de l’utilisateur à une entreprise, ce qui permet de garantir que chaque utilisateur accède uniquement aux contenus spécifiquement associés à son entreprise. De plus, certains contenus par défaut, créés par un administrateur, peuvent être utiles pour tous les utilisateurs et doivent donc rester accessibles en lecture pour toutes les entreprises.
Cet article propose une solution simple et sans code pour une gestion sécurisée et automatisée des droits utilisateurs dans Drupal, en utilisant le module Access Policy. Ce module facilite une gestion granulaire des autorisations par entreprise, assurant ainsi une expérience utilisateur ciblée et sécurisée.

Prérequis

Avant de commencer, veuillez vous assurer de satisfaire aux conditions suivantes :

  • Disposer d’un environnement Drupal fonctionnel. Pour des instructions détaillées, veuillez consulter Comment installer Drupal dans un conteneur Docker.
  • Un champ d’identification de l’entreprise configuré sur les types de contenu et sur l’entité utilisateur. Ce champ, qui peut être nommé différemment selon votre configuration (par exemple accountId), doit permettre d’identifier l’entreprise à laquelle chaque utilisateur et chaque contenu appartient.
  • Pour la gestion des cas de création d’éléments et l’injection automatique de l’accountId du utilisateur, veuillez consulter l’article Injection Automatique de l’ID du Cabinet dans les Contenus Créés.

Use Case

Nous allons utiliser le module Access Policy pour gérer l’accès à un type de contenu nommé “Document” en fonction de l’appartenance des utilisateurs à une entreprise. L’objectif est de garantir deux niveaux de contrôle d’accès :

  • Accès restreint aux contenus par entreprise : chaque utilisateur pourra uniquement consulter les documents associés à son entreprise, ainsi que les documents par défaut créés par un administrateur. Par exemple, si un utilisateur de l’entreprise Alpha accède à la liste des documents, il ne verra que ceux créés par d’autres membres de l’entreprise Alpha, ainsi que les documents par défaut créés par l’administrateur (documents sans valeur dans le champ accountId).
  • Permissions d’édition et de suppression : chaque utilisateur pourra modifier ou supprimer uniquement les documents associés à son entreprise. Les documents créés par un administrateur (avec un accountId null) seront accessibles pour consultation, mais resteront non modifiables. Par exemple, si l’utilisateur Alice de l’entreprise Beta souhaite modifier un document, elle ne pourra le faire que pour les documents de son entreprise. Les documents par défaut créés par un administrateur seront visibles mais protégés contre toute modification.

Installation du module Access Policy

Ce module est un outil puissant qui permet de contrôler l’accès aux entités Drupal en fonction de champs et d’attributs, sans nécessiter l’écriture d’une seule ligne de code. Il repose sur une architecture de contrôle d’accès basée sur les attributs (ABAC), venant compléter le contrôle d’accès basé sur les rôles (RBAC) de Drupal. Il offre une grande flexibilité pour définir des règles d’accès détaillées, parfaitement adaptées à des besoins spécifiques, tels que la gestion des accès en fonction de l’appartenance à une entreprise. Pour l’installer, commencez par exécuter la commande suivante avec Composer :

composer require 'drupal/access_policy:^1.0@beta'

Cela téléchargera et installera le module ainsi que ses dépendances. Ensuite, vous devez l’activer. Pour ce faire, accédez à Extend dans le menu d’administration de Drupal, recherchez “Access Policy”, cochez la case correspondante, puis cliquez sur Install en bas de la page.

Alternativement, si vous utilisez Drush, vous pouvez l’activer en exécutant la commande suivante :

drush en access_policy

Configuration

Une fois le module installé et activé, vous pouvez commencer à configurer des règles d’accès pour restreindre l’accès aux contenus. Accédez au menu d’administration de Drupal, sous /admin/people/access-policies. Cela vous amènera à la page où vous pouvez créer et gérer vos règles d’accès. Ensuite, cliquez sur Add access policy pour créer une nouvelle règle d’accès. Vous serez invité à définir les paramètres suivants :

  • Label : Il s’agit du nom lisible par l’utilisateur de cette règle d’accès. Ce nom doit être unique afin de pouvoir distinguer facilement cette règle des autres. Il est recommandé de choisir un nom descriptif qui reflète clairement l’objectif de la règle.
  • Entity type : Ce paramètre vous permet de spécifier le type d’entité auquel cette règle d’accès s’applique. Par exemple, vous pouvez choisir Content si vous souhaitez que la règle concerne les contenus (articles, pages, etc.) dans Drupal. Ce choix détermine l’entité sur laquelle les restrictions d’accès seront appliquées.

Ensuite, configurez les opérations (voir les contenus non publiés, voir, voir toutes les révisions, éditer, supprimer) pour déterminer les permissions d’accès pour différents rôles d’utilisateurs dans la section Operations. Pour le rôle Authenticated user ajustez les permissions via Edit permissions pour attribuer à ce rôle les autorisations suivantes :

La section Access Rules permet de définir des règles d’accès fines basées sur des champs spécifiques (par exemple, accountId) et des valeurs environnementales. Ces règles restreignent l’accès en fonction de paramètres comme l’appartenance d’un contenu à une entreprise ou d’autres conditions.

Dans ce cas précis, nous définissons deux règles utilisant l’option Compare accountId with user pour limiter l’accès aux contenus associés spécifiquement à l’entreprise de l’utilisateur connecté.

La première règle permet aux utilisateurs d’accéder en lecture aux contenus de leur entreprise ainsi qu’aux contenus par défaut (sans accountId). Elle compare l’accountId du contenu à celui de l’utilisateur via l’opérateur Is one of. Si le champ est vide, l’accès est autorisé avec l’option Allow, ce qui garantit l’accès aux contenus par défaut. Les opérations de lecture sont activées, appliquant cette règle aux requêtes pour masquer les contenus non autorisés dans les listes. La configuration illustrée ci-dessous correspond à cette règle.

La deuxième règle restreint l’accès en modification et suppression aux utilisateurs uniquement pour les contenus associés à leur propre entreprise, tout en empêchant la modification des contenus créés par un administrateur (contenus avec accountId null, qui doivent rester non modifiables). Elle compare l’accountId du contenu à celui de l’utilisateur via l’opérateur Is one of. Si le champ est vide, l’accès est refusé Deny, garantissant que les contenus par défaut ne puissent pas être modifiés. Cette règle est appliquée aux opérations de modification et suppression, comme le montre la configuration ci-dessous.

Pour définir le nombre de règles devant être respectées pour qu’un utilisateur accède au contenu, sélectionnez l’opérateur de validation en utilisant l’option Any. Cela signifie qu’au moins une règle doit être vraie pour accorder l’accès. L’option All imposerait que toutes les règles soient respectées pour accorder l’accès.

Dans Query settings, l’option Apply access policy to queries masque les contenus non autorisés dans les pages de liste et les champs de référence. En cas d’accès refusé, un code 403 est renvoyé. Par défaut, ces paramètres appliquent les règles d’accès définies sans modifications supplémentaires.

Dans l’onglet Manage selection, vous pouvez assigner des politiques d’accès basées sur des permissions et des règles de sélection avancées, comme l’auteur, le type de contenu ou des valeurs de champs spécifiques. En cliquant sur Add selection rule et en choisissant Content Type, vous définissez que cette politique s’appliquera uniquement aux types de contenu sélectionnés, par exemple “Document”. L’option de validation All permet de préciser que toutes les règles configurées doivent être vraies pour activer cette politique. Vous pouvez également regrouper cette politique avec d’autres dans un selection set afin de combiner plusieurs règles d’accès et répondre ainsi à des exigences plus complexes en matière de permissions.

Pour que le module Access Policy applique ensuite les restrictions supplémentaires basées sur l’accountId, allez dans People > Permissions et assurez-vous que les utilisateurs ont les permissions de base pour voir, modifier et supprimer tous les contenus du type de contenu concerné (ici, “Document”). Cela garantit que les utilisateurs disposent des permissions minimales, tandis que les politiques d’accès restreignent l’accès de manière granulaire selon l’appartenance d’un contenu à une entreprise.

Test

Nous avons 4 documents de type “Document” dans le système :

  • document 0 : Créé par l’administrateur Vadly (contenu par défaut, accessible à tous).
  • document A1 : Créé par Marie de l’entreprise ALPHA.
  • document A2 : Créé par John de l’entreprise ALPHA.
  • document B1 : Créé par Alice de l’entreprise BETA.

Lorsque John effectue une requête GET pour obtenir la liste des documents, il doit voir les documents associés à son entreprise, soit document A1 et document A2, ainsi que le document 0 créé par l’administrateur. Il ne verra pas le document B1 de l’entreprise BETA, car ce document ne lui est pas accessible.

John peut modifier et supprimer uniquement les documents de son entreprise ALPHA, à savoir document A1 et document A2. Lorsqu’il tente de modifier ou de supprimer document B1 (créé par Alice de l’entreprise BETA) ou document 0 (créé par l’administrateur), il recevra une erreur 403 indiquant qu’il n’a pas les droits nécessaires pour effectuer ces actions.

Conclusion

Le module Access Policy de Drupal offre une solution puissante et sans code pour gérer des restrictions d’accès basées sur des attributs, tels que l’appartenance à une entreprise. En configurant des règles adaptées aux besoins de sécurité et de confidentialité, il devient possible de contrôler précisément qui peut voir, modifier, ou supprimer certains contenus. Grâce à ce module, les entreprises peuvent garantir que chaque utilisateur accède uniquement aux informations qui lui sont destinées, tout en permettant l’accès aux contenus communs pour tous les utilisateurs. Avec une configuration simple et une validation par des tests, vous pouvez désormais assurer une gestion robuste et sécurisée des accès dans Drupal, alignée avec les exigences de votre projet.

Développeuse fullstack * Plus de publications

Développeuse fullstack spécialisée en Systèmes d'Information Répartis , diplômée de la section informatique de la Faculté des Sciences et Techniques (FST) de l'UCAD. Je relève avec passion des défis complexes, avec une forte capacité d'adaptation et un engagement pour la collaboration en équipe. Toujours avide d'apprendre, je vise à créer un impact positif et à promouvoir l'excellence organisationnelle dans chaque projet.

Contributeurs

0 0 votes
Évaluation de l'article
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires

Ingénierie informatique (SSII)

Applize crée des logiciels métiers pour accompagner les entreprises dans la transition vers le zéro papier.


Avez-vous un projet en tête ? Discutons-en.