Strapi : création d’un plugin Favorite Views
16 juillet 2024
Pour le besoin d’un client, nous avons entrepris la refonte d’un projet web. Nous avons exploré différentes alternatives au CMS qui était utilisé et c’est vers Strapi que nous nous sommes tournés. Ce choix s’appuie sur les avantages de Strapi, notamment sa structure headless et son architecture flexible.
La refonte permet de répondre aux besoins spécifiques de notre client, car Strapi propose de nombreuses fonctionnalités et offre beaucoup de possibilités grâce à la création de plugins personnalisés. L’une des difficultés que nous avons rencontrées réside dans le fait de devoir conserver un certain nombre de fonctionnalités présentes dans le CMS initial, comme la mise en favoris de certaines recherches filtrées.
Nous avons ainsi créé le plugin Strapi Favorite Views pour répondre à ce besoin spécifique : sauvegarder et retrouver facilement des configurations de recherches filtrées (ou vues), en optimisant le flux de travail.
Headless Experience Conf' - Strapi et l'expérience développeur
Les fonctionnalités du plugin Favorite Views
- Sauvegarde des configurations de filtres :
Le plugin Favorite Views offre une fonctionnalité de sauvegarde des configurations de filtres, permettant aux utilisateurs de conserver et de retrouver facilement les vues personnalisées qu’ils ont créées. Cette fonctionnalité est nécessaire pour les utilisateurs qui effectuent des recherches complexes ou fréquentes dans les content types.
Par défaut, dans Strapi, les configurations de filtres sont stockées dans l’URL de la page. C’est pourquoi nous avons pris le parti de sauvegarder l’URL contenant les paramètres de filtre. Cela permet un accès direct à une vue personnalisée en partageant simplement l’URL.
- Partage des vues :
Le plugin ne se contente pas de permettre aux utilisateurs de sauvegarder leurs vues personnalisées. Il offre également un système de partage flexible et granulaire pour répondre aux besoins de chaque équipe, notamment grâce à trois niveaux de partages :
-
- Privé : Gardez vos vues pour vous, accessibles uniquement depuis votre compte. Idéal pour les recherches en cours ou les paramètres personnels.
- Public : Partagez vos vues avec tous les contributeurs du projet. Parfait pour les vues fréquemment utilisées par l’équipe, facilitant l’accès aux informations essentielles.
- Rôles spécifiques : Attribuez des vues à des rôles précis au sein du projet. Une gestion granulaire des accès pour une collaboration optimale, en fonction des responsabilités de chaque utilisateur.
Ces niveaux de partages permettent de définir des permissions précises pour chaque vue, garantissant que seuls les utilisateurs autorisés y ont accès.
- Visibilité :
Concernant la visibilité des différentes vues, nous avons créé un board pour l’utilisateur avec deux onglets :
-
- Un premier “mes vues” qui permet d’afficher les vues créées par l’utilisateur, que ce dernier peut modifier ou supprimer.
- Un second avec toutes celles créées par d’autres contributeurs et qui sont partagées avec tout le monde ou “mon rôle”.
- Widget “Favorites Views” :
Le plugin s’intègre parfaitement à l’interface d’administration de Strapi grâce à un widget dédié. Il est présent sur toutes les collection-types et permet aux utilisateurs de retrouver facilement les vues privées qu’ils ont créées.
Il permet un gain de temps, une recherche intuitive et une meilleure productivité pour les utilisateurs de Strapi.
Le développement du plugin Favorite Views
Analyse des filtres Strapi :
Durant la phase de développement du plugin, nous avons analysé les fonctionnalités existantes de Strapi, en mettant l’accent sur la manière dont les filtres de recherche sont gérés au sein des content types. Nous avons constaté que, par défaut, les filtres dans Strapi sont stockés dans l’URL de la page. Cette observation nous a permis de tirer parti de cette fonctionnalité pour répondre aux exigences de notre client en matière de sauvegarde et de partage des vues filtrées.
Cette approche nous a offert plusieurs avantages significatifs. Tout d’abord, en utilisant l’URL pour stocker les configurations de filtres, nous avons assuré un accès direct aux vues personnalisées, ce qui simplifie considérablement leur récupération ultérieure. En outre, cela a facilité la mise en œuvre de la fonction de partage des vues, car il suffit de partager l’URL correspondante pour permettre à d’autres utilisateurs d’accéder à la même configuration filtrée.
En analysant le fonctionnement des filtres Strapi, nous avons pu concevoir une solution qui s’intègre harmonieusement avec l’architecture existante de Strapi. Cette approche a été le point de départ de notre développement du plugin des Favorite Views, nous permettant ainsi de proposer une solution adaptée aux besoins de notre client.
Content-type Favorite Views sur Strapi :
Le content-type Favorite Views a été conçu dans un souci de performance et de flexibilité. Il est directement lié au plugin et n’est pas créé dans le projet comme un content-type “normal”. Il contient les champs :
- Name : permet d’attribuer un titre descriptif à chaque vue pour une identification facile.
- Slug : stocke l’URL unique de la vue pour un accès direct et une navigation fluide.
- Roles : détermine les rôles utilisateurs autorisés à accéder à la vue, garantissant la sécurité et le contrôle des données.
- Visibility : offre le choix entre une vue publique accessible à tous ou une vue privée réservée à certains utilisateurs.
Les aspects techniques du plugin Favorite Views
Requêtes filtrées côté serveur
Toutes les requêtes sont faites sur des URL de type admin (fonctionnalité Strapi) qui ne sont accessibles que depuis cette URL par des utilisateurs authentifiés. Il s’agit d’une sécurité supplémentaire qui est directement intégrée à Strapi.
Le plugin Favorite Views effectue les requêtes filtrées côté serveur, garantissant ainsi un contrôle précis des autorisations et de la visibilité des vues. Cela signifie que les filtres ne sont pas simplement appliqués au niveau du client, mais que le serveur Strapi vérifie également les permissions de l’utilisateur avant de renvoyer les résultats. Cette approche offre plusieurs avantages :
- Sécurité améliorée : seuls les utilisateurs autorisés peuvent accéder aux vues filtrées, ce qui empêche les données sensibles d’être exposées à des utilisateurs non autorisés.
- Contrôle granulaire : l’utilisateur peut définir des permissions précises pour chaque vue, en spécifiant les rôles utilisateurs qui peuvent y accéder. Cela permet une gestion plus fine des accès et garantit que chaque utilisateur ne voit que les données qui lui sont pertinentes.
- Performances optimisées : en effectuant les requêtes filtrées côté serveur, le plugin réduit la charge sur le client et améliore les performances globales de l’application.
Optimisation des performances
Le plugin Favorite Views a été conçu pour minimiser son impact sur les performances de Strapi. Cela a été réalisé en utilisant des techniques telles que l’optimisation des requêtes SQL. Elles sont optimisées pour minimiser le temps d’exécution et maximiser l’efficacité. Cette optimisation est en partie réalisée grâce à l’utilisation de la pagination, qui permet de gérer efficacement les volumes importants de données, mais également en utilisant des requêtes filtrées qui permettent de ne récupérer que les données dont nous avons réellement besoin.
Compatibilité
Le plugin Favorite Views est compatible avec les dernières versions de Strapi. Il a été testé et validé sur Strapi 4.x et ses versions ultérieures. Cela garantit que le plugin fonctionne de manière transparente avec une installation Strapi existante et que l’on peut profiter des dernières fonctionnalités et correctifs de sécurité.
Publication du plugin
L’une des prochaines étapes importantes est de publier le plugin Favorite Views sur NPM puis sur la marketplace Strapi. Cela permettra à la communauté de découvrir et de profiter de ses fonctionnalités. La publication sur la marketplace facilitera également l’installation et la mise à jour du plugin pour les utilisateurs.
Strapi est un CMS Open-Source qui offre la possibilité à la communauté de contribuer à son évolution. C’est un mode de fonctionnement que nous apprécions particulièrement à Kaliop, nous aimons nous challenger, et contribuer à une solution pour répondre à des besoins et enjeux spécifiques de nos clients. Je vous invite d’ailleurs à lire un autre article que nous avons publié sur le développement de plugins spécifiques.
![Emmanuel Cathelain](https://www.kaliop.com/app/uploads/2023/04/72A6412-1-scaled-e1682674875150-150x150.jpg)