Améliorations des ACL — Ensembles d'autorisations dans TYPO3

Auteurs : Łukasz Uznański
Traduit par : Célia - W-Seils

Lire l’article complet en version originale

Dans cet article, Łukasz Uznański décrit la conception, le parcours de développement (y compris les expériences et les pièges liés à l'expérience utilisateur) et les scénarios pratiques d'application des ensembles d'autorisations dans les projets TYPO3 nouveaux et existants.

L'initiative d'amélioration des listes de contrôle d'accès (ACL) introduit une approche basée sur les fichiers, avec une interface utilisateur, pour la gestion des permissions backend dans TYPO3. Elle s'appuie sur les travaux précédents, mais les redéfinit grâce aux ensembles de permissions : des fichiers de configuration déployables, versionnables et faciles à intégrer. Avec la nouvelle extension ACL Enhancements (acl_enhancements) , les permissions peuvent être exportées, importées, modifiées et distribuées entre les environnements.

Les principaux avantages sont les suivants :

  • Cohérence grâce à une source unique de vérité
  • ACL déployables et versionnées
  • Des flux de travail conviviaux pour la création et la gestion des préréglages
  • Extensibilité via des préréglages d'extension tiers et des outils d'écriture de fichiers personnalisés
  • Outils de débogage et d'audit offrant une visibilité sur l'utilisation des autorisations

Contexte et motivation

Nous souhaitions créer une extension autonome  afin d'apporter à la communauté des améliorations essentielles au flux de travail de TYPO3. Nous avons repris les travaux précédents relatifs aux ACL, extrait des fonctionnalités de correctifs, puis étendu la compatibilité à TYPO3 v13 et commencé à développer des fonctionnalités supplémentaires. 

L'objectif était de rendre les ensembles d'autorisations utilisables dans la vie réelle par la communauté .

Qu'est-ce qu'un ensemble d'autorisations ?

Un ensemble d'autorisations est un fichier qui décrit intégralement les règles ACL d'un groupe backend. Il représente toutes les sélections de la configuration du groupe, stockées en dehors de la base de données.

  • Où il se trouve :
    • Configuration/PermissionSets/ dans n'importe quelle extension
    • config/permission-sets/ au niveau de l'installation (emplacement d'exportation par défaut)
       
  • Pourquoi c'est important :
    • Garantit une source unique de vérité : si un champ est géré par un ensemble d’autorisations, il ne peut pas non plus être modifié dans la base de données.
    • Maintient la légèreté des groupes backend : ils ne font référence qu’à des ensembles d’autorisations.
    • Permet le déploiement et le contrôle de version des ACL, tout comme pour le code.

Considérez un ensemble d'autorisations comme une infrastructure en tant que code pour les ACL TYPO3.

Autorisations déployables et versionnables

Auparavant, les ACL existaient uniquement dans la base de données, ce qui limitait leur portabilité et leur traçabilité. Grâce aux améliorations apportées aux ACL :

  • Les groupes backend peuvent importer des ensembles d'autorisations.
  • Les éditeurs peuvent exporter les groupes existants sous forme de préréglages réutilisables.
  • Les fichiers peuvent être enregistrés dans Git, examinés dans des demandes d'extraction et déployés dans différents environnements.

Cela transforme les ACL (listes de contrôle d'accès) d'enregistrements de base de données en ressources de code. Les permissions sont désormais portables, auditables et cohérentes entre les environnements de développement, de préproduction et de production.

Exemple de fichier d'exportation généré par l'extension, qui peut être utilisé comme ensemble, importé ou joint à votre extension :

étiquette : 'Tous les utilisateurs'
catégories : { }
options personnalisées : { }
Points de montage de fichiers : { }
Autorisations du fichier :
  - dossier de lecture
  - écrireDossier
  - ajouterDossier
  - renommer le dossier
  - déplacer le dossier
  - copierDossier
  - supprimer le dossier
  - lireFichier
  - écrireFichier
  - ajouterFichier
  - renommer le fichier
  - déplacerFichier
  - copierFichier
  - supprimerFichier
langues : { }
mfaProviders : { }
modules :
  configuration_utilisateur : vrai
ressources:
  pages :
    autorisations :
      - lire
  fichier_système :
    autorisations :
      - lire
  collection_de_fichiers_système :
    autorisations :
      - lire

Ensembles d'autorisations d'extensions tierces

Les ensembles de permissions ne se limitent pas au code du projet. Les auteurs d'extensions peuvent fournir des préréglages ACL pour leurs propres modules et tables, ce qui facilite la mise en œuvre générale des permissions dans tous les projets TYPO3.

  • Les intégrateurs n'ont plus besoin de reconfigurer manuellement les ACL après les mises à jour des extensions.
  • Les ACL d'extension évoluent en synchronisation avec le code – elles sont toujours à jour.
  • Les projets restent cohérents sans frais de maintenance supplémentaires.

Cela introduit un modèle de responsabilité partagée : les auteurs d’extensions définissent les valeurs par défaut, les intégrateurs décident comment et si elles doivent être utilisées. 

Parcours de développement : du concept aux fonctionnalités utilisables

Point de départ : Importation uniquement

Le correctif initial permettait uniquement d'importer des ensembles d'autorisations et de les appliquer aux groupes backend. Cette fonctionnalité était puissante, mais trop limitée. Les éditeurs ne pouvaient ni créer ni modifier eux-mêmes ces ensembles, et les intégrateurs devaient gérer les fichiers manuellement dans les EDI.

Faciliter le travail de l'éditeur : Préréglages des groupes d'administration

Pour améliorer l'ergonomie, j'ai introduit un bouton « Créer un préréglage » qui vous permet de créer des préréglages à partir du groupe d'administration.

  1. Sélectionnez un groupe backend.
  2. Ouvrez une vue TCA prédéfinie (groupe backend fictif). Il s'agit d'un formulaire qui ressemble à un groupe, mais qui masque les champs non pertinents. Ajoutez ensuite vos propres champs et options de gestion.

Choisissez d'enregistrer ou d'exporter la configuration sous forme de fichier YAML dans config/permission-sets/.

Cela permet aux éditeurs de migrer les groupes existants basés sur une base de données vers des ensembles d'autorisations basés sur des fichiers.

 

Expérimentations UX : Fenêtres modales vs. Pages dédiées

J'ai d'abord essayé d'intégrer la fausse vue TCA dans une fenêtre modale. C'était esthétique, mais son utilité était discutable. Les recommandations UX de TYPO3 déconseillent également d'intégrer des vues logiques dans des fenêtres modales.

J'ai opté pour l'ouverture des préréglages dans un nouveau module. Cela a résolu les problèmes de navigation et a permis d'ajouter des fonctionnalités comme l'enregistrement, l'exportation et la modification.

Flux de travail d'exportation

Au départ, les groupes et les ensembles d'autorisations du backend disposaient d'un bouton d'exportation générant des fichiers YAML. Bien que fonctionnel, ce système a engendré de la confusion : exporter un groupe n'avait guère de sens, puisqu'il s'agissait d'exporter un ensemble d'autorisations et non le groupe lui-même.

Décision : Supprimer l’exportation des groupes et la conserver uniquement dans le contexte des ensembles d’autorisations. Cela renforce la clarté et s’aligne sur le modèle de données logique.

Module backend : interface utilisateur de gestion complète

Pour remplacer l'édition manuelle des fichiers, j'ai créé un module backend dédié.

Caractéristiques :

  • Liste des ensembles d'autorisations dans tous les répertoires
  • Création de nouveaux ensembles à partir de zéro (via la vue TCA)
  • Duplication d'ensembles (clonage de fichiers)
  • Suppression des ensembles (suppression définitive du fichier)
  • Téléchargement des ensembles pour le contrôle de version
  • Affichage des métadonnées : identifiant ( fournisseur/package/nom de fichier ), date de création, date de dernière modification, si utilisé par les groupes backend
  • Affichage du nombre d'utilisations : nombre de groupes backend utilisant un ensemble donné
  • Avertissement concernant l'état corrompu d'un fichier invalide ou malformé
  • Afficher l'état de lecture seule pour les fichiers qui ne se trouvent pas dans le répertoire de configuration global

Défis techniques : la gestion des fichiers dans l’interface d’administration de TYPO3 n’était pas simple ; la gestion des répertoires, des horodatages et des identifiants a nécessité une logique personnalisée. Mais ce travail était indispensable pour rendre les améliorations ACL véritablement conviviales pour les éditeurs.

Fonctionnalités supplémentaires

Aperçu des ensembles d'autorisations non modifiables

Ce module propose des aperçus en lecture seule des ensembles d'autorisations. Ces aperçus ne peuvent pas être modifiés dans l'interface utilisateur, mais peuvent être examinés en détail.

  • Affiche les métadonnées telles que l'identifiant, le fournisseur et les horodatages.
  • Affiche le nombre de groupes backend qui utilisent l'ensemble.
  • Permet une navigation directe dans les groupes backend

Cela empêche les modifications accidentelles tout en offrant aux administrateurs une visibilité complète sur l'impact de chaque ensemble.

Informations sur l'utilisation au niveau du terrain

Lorsqu'un champ backend est verrouillé car il est géré par un ensemble d'autorisations, l'interface utilisateur affiche exactement :

  • Quel(s) ensemble(s) d'autorisations gère(nt) ce champ
  • Comment les ensembles qui se chevauchent interagissent avec lui

Sans cela, le débogage des permissions relève de la conjecture. Grâce à cela, les intégrateurs peuvent immédiatement voir pourquoi un champ est bloqué et quel ensemble de paramètres est responsable.

Liaison du groupe backend

En plus des aperçus et des informations au niveau des champs, le module suit également les groupes backend connectés à un ensemble d'autorisations donné.

  • Chaque préréglage liste tous les groupes qui y font référence.
  • Permet d'accéder directement à ces groupes à partir de la vue prédéfinie
  • Aide les administrateurs à comprendre les dépendances avant de modifier, dupliquer ou supprimer un ensemble.

Cette fonctionnalité est particulièrement utile dans les installations TYPO3 de grande envergure où plusieurs groupes peuvent dépendre du même préréglage. Elle permet aux administrateurs d'évaluer les modifications en toute sécurité, sans effets secondaires indésirables.

Extensibilité via les enregistreurs de fichiers

Par défaut, les permissions sont définies sur YAML, mais le système prend en charge d'autres formats d'écriture de fichiers. Les projets peuvent implémenter JSON, XML ou d'autres formats si nécessaire. Cette approche flexible garantit une intégration aisée dans divers pipelines CI/CD.

Fonctionnalités prévues

L'extension ACL Enhancements est disponible publiquement et nous souhaitons l'améliorer collectivement. Les développeurs d'extensions tierces peuvent proposer leurs propres ensembles d'autorisations, ce qui favoriserait son adoption et normaliserait son utilisation dans TYPO3. Voici quelques pistes pour l'avenir :

Comparer les préréglages

Ajoutez une fonctionnalité permettant de comparer deux préréglages et de visualiser les différences dans leur configuration ACL. Cela aidera les intégrateurs à identifier rapidement les incohérences et à déterminer s'il est nécessaire de créer un nouvel ensemble d'autorisations ou si un ensemble existant peut être réutilisé.

Importer les ACL depuis le module

Introduisez une fonction d'importation permettant de charger directement les définitions de listes de contrôle d'accès (ACL) depuis un module backend TYPO3 vers le répertoire système `config/permission-sets/`. Cela accélère la création d'ensembles sans avoir à exporter ni modifier manuellement les fichiers.

Héritage des ensembles d'autorisations

Activer l'héritage entre les ensembles d'autorisations. En pratique :

  • L'interface utilisateur doit empêcher la modification des champs provenant d'un ensemble hérité.
  • Les permissions doivent afficher une note expliquant leur raison d'être (c'est-à-dire l'ensemble parent dont elles proviennent).
    Cela permet d'éviter les remplacements accidentels et clarifie la source et la hiérarchie.

Remplacer les ACL de la base de données héritée

Ajouter un mécanisme permettant de remplacer les anciennes listes de contrôle d'accès (ACL) définies dans la base de données par de nouveaux ensembles basés sur des fichiers. Cela permettrait aux intégrateurs de migrer les groupes existants sans avoir à les recréer manuellement, garantissant ainsi une adoption plus fluide des permissions déployables.

Nouvel ensemble Wizard

Modifiez le bouton « Nouveau » pour qu'il lance un assistant. Cet assistant permettra de sélectionner un ou plusieurs ensembles d'autorisations existants comme modèles, puis de les copier dans un nouvel ensemble. Cela simplifie la création de nouveaux ensembles en réutilisant les configurations existantes.

Lier les groupes backend aux fichiers

Instaurer une liaison entre les groupes backend et les ensembles d'autorisations. Ainsi, toute modification apportée au groupe mettra automatiquement à jour le fichier associé. Combiné au suivi des versions, cela garantit la synchronisation des fichiers sans nécessiter d'exportations manuelles.

Écraser ou Enregistrer sous

Lors de l'exportation d'un ensemble, affichez une fenêtre contextuelle demandant si vous souhaitez écraser le fichier existant ou l'enregistrer sous un nouveau nom. Par défaut, les nouveaux fichiers doivent respecter la convention de nommage [nom_de_fichier]-X , où le nom de base dépend du titre du groupe. Cela évite les écrasements accidentels tout en garantissant des noms de fichiers prévisibles.

 

Conclusion

Les améliorations apportées aux ACL redéfinissent la gestion des permissions dans TYPO3 :

  • Les ensembles d'autorisations apportent clarté et cohérence.
  • Les autorisations deviennent déployables, versionnables et extensibles.
  • Les éditeurs et les intégrateurs disposent d'outils pratiques pour la gestion et le débogage.
  • Les auteurs d'extensions peuvent inclure des ACL dans leurs packages.

Cette initiative fait le lien entre l'ergonomie et l'infrastructure en tant que code, rendant les permissions TYPO3 flexibles, maintenables et pérennes, et le résultat de cette initiative est une extension autonome que vous pouvez utiliser dans votre projet.

Nous vous encourageons à utiliser l'extension ACL Enhancements, à nous faire part de vos commentaires et à signaler tout problème rencontré.

Découvrez   les améliorations ACL sur GitHub !

Retracer l'historique de ce projet

 

Do you want to publish
a guest blog post?

 

Contact us

Do you want to publish
your own case study?

 

Get in touch