RGPD & Consentement aux cookies

Une boîte à outils complète de conformité RGPD pour votre site Larapen. Affichez une bannière de consentement aux cookies personnalisable, enregistrez les décisions de consentement des visiteurs pour la conformité d’audit, et gérez les catégories de cookies depuis le panneau d’administration.

Bannière de consentement aux cookies

Une bannière soignée et responsive avec les options Tout accepter, Tout refuser et Personnaliser. Sept variantes de position incluant le mode modal.

Catégories granulaires

Quatre catégories de cookies (Essentiels, Analytiques, Marketing, Préférences) avec des contrôles de bascule par catégorie pour les visiteurs.

Journalisation du consentement

Piste d’audit complète de chaque décision de consentement : adresse IP, agent utilisateur, action effectuée et catégories sélectionnées. Conforme à l’article 7 du RGPD.

Auto-injection

La bannière est automatiquement injectée dans toutes les pages front-end via un middleware. Aucune modification de modèle nécessaire. Ignore le panneau admin et les requêtes AJAX.

Cas d’utilisation

Conformité des sites web UE/EEE

Votre site sert des visiteurs dans l’Union européenne et doit se conformer au RGPD et à la directive ePrivacy.

  • Activez la bannière de consentement aux cookies pour informer les visiteurs de l’utilisation des cookies.
  • Activez la journalisation du consentement pour maintenir un registre auditable de toutes les décisions de consentement.
  • Liez votre page de politique de confidentialité afin que les visiteurs puissent consulter vos pratiques en matière de données.
  • Configurez les bascules de catégories pour que les visiteurs puissent accepter/refuser les cookies analytiques et marketing.

Site avec beaucoup d’analyses

Vous utilisez Google Analytics, Hotjar ou des outils similaires et avez besoin du consentement de l’utilisateur avant de charger les scripts de suivi.

  • Activez la bascule de la catégorie Analytiques.
  • Lisez la valeur du cookie de consentement (gdpr_consent) dans votre JavaScript avant de charger les scripts d’analyse.
  • Ne chargez les analyses que lorsque categories.analytics === true.

Marketing & Reciblage publicitaire

Vous utilisez Facebook Pixel, Google Ads ou des outils de marketing par e-mail qui définissent des cookies.

  • Activez la bascule de la catégorie Marketing.
  • Conditionnez tous les scripts marketing/publicitaires au drapeau de consentement marketing.
  • Les visiteurs peuvent révoquer leur consentement à tout moment via le point de terminaison de retrait.

Prérequis

  • Larapen CMS v1.0.0 ou ultérieur
  • PHP 8.3+
  • MySQL 8.0+
Note : Cet add-on est entièrement autonome : il n’a aucune dépendance envers d’autres add-ons. Il fonctionne dès l’activation.

Installation

Étape 1 : Placer l’add-on

Copiez ou créez un lien symbolique du dossier gdpr dans votre répertoire Larapen « extensions/addons » :

Étape 2 : Activer l’add-on

Allez dans Admin → Add-ons → Add-ons installés et activez RGPD & Consentement aux cookies.

Étape 3 : Exécuter les migrations

Cela crée la table gdpr_consent_logs pour stocker les enregistrements d’audit du consentement.

Étape 4 : Définir les permissions

L’add-on enregistre 4 permissions (voir Permissions). Assignez-les aux rôles admin via Admin → Utilisateurs → Rôles & Permissions.

Étape 5 : Configurer

Naviguez vers Admin → RGPD → Paramètres pour configurer la position de la bannière, la durée de vie du cookie, la journalisation du consentement et les catégories de cookies. Voir Configuration pour les détails.

C’est tout ! La bannière de cookies apparaîtra automatiquement sur toutes les pages front-end pour les visiteurs qui n’ont pas encore fait de choix de consentement. Aucune modification de modèle requise.

Configuration

Tous les paramètres sont gérés dans Admin → RGPD → Paramètres (stockés dans la table settings, groupe gdpr). Les valeurs par défaut proviennent de config/gdpr.php.

Paramètre Description Par défaut
gdpr_enabled Activer ou désactiver la bannière de consentement aux cookies globalement. true
gdpr_cookie_lifetime Combien de jours le cookie de préférence de consentement est mémorisé (1–3650). 365
gdpr_log_consents Enregistrer chaque décision de consentement du visiteur dans la base de données pour l’audit de conformité. true
gdpr_banner_position Où la bannière apparaît sur la page (7 positions disponibles). bottom-center
gdpr_privacy_policy_url URL vers votre page de politique de confidentialité, affichée comme lien dans la bannière. (vide)
gdpr_category_analytics Afficher la bascule de la catégorie de cookies Analytiques dans le panneau de préférences. false
gdpr_category_marketing Afficher la bascule de la catégorie de cookies Marketing dans le panneau de préférences. false
gdpr_category_preferences Afficher la bascule de la catégorie de cookies Préférences dans le panneau de préférences. false

Valeurs par défaut du fichier de configuration

Le fichier config/gdpr.php fournit les valeurs par défaut utilisées lorsqu’aucun paramètre de base de données n’existe :

Admin : Paramètres

La page des paramètres (RGPD → Paramètres) est organisée en trois zones principales :

Paramètres généraux

La colonne de gauche (7/12 de largeur) contient les options de configuration principales :

  • Activer la bannière de cookies : interrupteur à bascule pour activer/désactiver la bannière globalement. Lorsqu’il est désactivé, aucune bannière n’est affichée et aucune injection par middleware n’a lieu.
  • Durée de vie du cookie (jours) : saisie numérique (1–3650 jours) contrôlant combien de temps le cookie de consentement persiste dans le navigateur du visiteur.
  • Position de la bannière : sélecteur visuel de position avec 7 positions affichées sur une maquette de navigateur. Cliquez sur une position pour la sélectionner ; le libellé se met à jour en temps réel.
  • Journaliser les actions de consentement : interrupteur pour activer/désactiver la journalisation du consentement dans la base de données. Lorsqu’il est activé, chaque action Accepter/Refuser/Personnaliser/Retirer est enregistrée.
  • URL de la politique de confidentialité : champ texte pour l’URL de votre page de politique de confidentialité. Si fourni, un lien « Politique de confidentialité » apparaît dans la bannière.

Sélecteur de position de la bannière

Le sélecteur de position est un élément visuel interactif montrant une fenêtre de navigateur miniature. Sept points cliquables représentent les positions disponibles :

Position Disposition Description
top-left Carte compacte Carte flottante dans le coin supérieur gauche (max 420px de large)
top-center Barre pleine largeur Barre horizontale en haut de la page
top-right Carte compacte Carte flottante dans le coin supérieur droit (max 420px de large)
middle-center Boîte de dialogue modale Modale centrée avec un fond semi-transparent
bottom-left Carte compacte Carte flottante dans le coin inférieur gauche (max 420px de large)
bottom-center Barre pleine largeur Barre horizontale en bas de la page (par défaut)
bottom-right Carte compacte Carte flottante dans le coin inférieur droit (max 420px de large)

Catégories de cookies

La colonne de droite (5/12 de largeur) affiche les quatre catégories de cookies avec des interrupteurs à bascule :

  • Essentiels : toujours actifs, ne peuvent pas être désactivés (affichés avec un badge « Toujours actif »). Ce sont les cookies nécessaires au fonctionnement du site (sessions, jetons CSRF, etc.).
  • Analytiques : activable. Lorsqu’il est activé, les visiteurs peuvent accepter/refuser les cookies analytiques (Google Analytics, Hotjar, etc.).
  • Marketing : activable. Lorsqu’il est activé, les visiteurs peuvent accepter/refuser les cookies marketing (Facebook Pixel, reciblage publicitaire, etc.).
  • Préférences : activable. Lorsqu’il est activé, les visiteurs peuvent accepter/refuser les cookies de préférence (langue, thème, personnalisation, etc.).
Note : Désactiver une catégorie dans l’admin la supprime entièrement de la bannière : les visiteurs ne verront pas la bascule pour cette catégorie dans le panneau de préférences.

Statistiques d’aperçu du consentement

En haut de la page des paramètres, cinq cartes statistiques affichent les métriques de consentement des 30 derniers jours :

  • Total des consentements : nombre total d’actions de consentement enregistrées
  • Tout accepté : visiteurs qui ont cliqué sur « Tout accepter »
  • Tout refusé : visiteurs qui ont cliqué sur « Tout refuser »
  • Personnalisé : visiteurs qui ont enregistré des préférences personnalisées
  • Taux d’acceptation : pourcentage de « Tout accepté » par rapport au total des consentements

La page des journaux de consentement (RGPD → Journaux de consentement) fournit une piste d’audit complète de chaque décision de consentement des visiteurs, comme requis par l’article 7 du RGPD.

Quatre mini cartes statistiques en haut de la page :

  • Total des consentements (couleur neutre)
  • Tout accepté (couleur succès/vert)
  • Tout refusé (couleur danger/rouge)
  • Taux d’acceptation (couleur accent, affiché en pourcentage)

Un tableau paginé (25 enregistrements par page) avec les colonnes suivantes :

Colonne Description
Visiteur Avatar + nom/e-mail de l’utilisateur (si authentifié) ou libellé « Invité » (si anonyme)
Adresse IP Adresse IP du visiteur, affichée en formatage monospace/code
Action Badge coloré : Tout accepté (vert), Tout refusé (rouge), Personnalisé (jaune), Retiré (gris)
Catégories Badges en ligne pour chaque catégorie montrant l’état activé (plein) ou désactivé (contour)
Date Temps relatif lisible (ex. « il y a 2 heures ») avec la date complète dans une infobulle

Filtres

  • Recherche : filtrer par adresse IP, nom d’utilisateur ou e-mail d’utilisateur
  • Action : liste déroulante pour filtrer par type d’action de consentement (accepted_all, rejected_all, customized, withdrew)

État vide

Lorsqu’aucun journal n’existe, un état vide convivial est affiché avec une grande icône et un message expliquant que les enregistrements apparaîtront une fois que les visiteurs interagiront avec la bannière.

La bannière de consentement aux cookies est un composant HTML/CSS/JS autonome qui est automatiquement injecté dans chaque page front-end via le middleware InjectCookieBanner.

Vue principale de la bannière

La vue principale affiche :

  • Icône de cookie : une illustration SVG en ligne d’un cookie
  • Titre : « Préférences de cookies »
  • Message : une brève explication de l’utilisation des cookies
  • Lien Politique de confidentialité : affiché uniquement si une URL est configurée dans les paramètres
  • Trois boutons d’action :
    • Tout accepter (bouton primaire sombre) : accepte toutes les catégories de cookies
    • Tout refuser (bouton secondaire gris) : refuse tous les cookies non essentiels
    • Personnaliser (bouton fantôme/texte) : ouvre le panneau de préférences

La bannière adapte sa disposition en fonction de la position configurée :

  • Positions pleine largeur (top-center, bottom-center) utilisent une disposition flex horizontale avec le contenu et les boutons côte à côte. Largeur maximale 860px, centrée.
  • Positions en coin (top-left, top-right, bottom-left, bottom-right) utilisent une disposition de carte compacte (max 420px) avec le contenu empilé.
  • Position modale (middle-center) centre la bannière avec un fond semi-transparent, fonctionnant comme une boîte de dialogue modale (max 520px).

Panneau de préférences

Cliquer sur « Personnaliser » fait la transition de la vue principale vers le panneau de préférences (sans rechargement de page). Le panneau affiche :

  • Bouton retour avec icône chevron : retourne à la vue principale de la bannière
  • Liste des catégories (défilable, hauteur maximale 280px) avec une ligne par catégorie activée :
    • Nom et description de la catégorie
    • Catégories obligatoires : affichent un badge « Toujours actif » (pas de bascule)
    • Catégories optionnelles : affichent un interrupteur à bascule CSS personnalisé
  • Enregistrer les préférences : bouton qui enregistre les catégories sélectionnées et ferme la bannière

Animations

La bannière utilise des animations CSS fluides :

  • Glissement depuis le bas pour les positions basses
  • Glissement depuis le haut pour les positions hautes
  • Fondu + mise à l’échelle pour la position modale centrale
  • Animations inverses lorsque la bannière est fermée

Design responsive

Sur les écrans en dessous de 768px :

  • Les barres pleine largeur passent en disposition verticale (empilée)
  • Les cartes en coin s’étendent en pleine largeur
  • Les boutons d’action s’empilent verticalement et remplissent la largeur

Traductions

Des fichiers de traduction sont fournis pour l’anglais (en) et le français (fr). Toutes les chaînes utilisent le préfixe d’espace de noms gdpr::.

Clés de traduction

Section Modèle de clé Description
Catégories gdpr::gdpr.categories.* Noms et descriptions des catégories (nécessaire, analytiques, marketing, préférences)
Actions gdpr::gdpr.actions.* Libellés des actions de consentement (accepted_all, rejected_all, customized, withdrew)
Positions gdpr::gdpr.positions.* Libellés des positions de la bannière pour le sélecteur admin
Front-end gdpr::gdpr.front.* Chaînes de l’interface de la bannière (titre, message, libellés des boutons, lien de confidentialité)
Paramètres admin gdpr::gdpr.admin.settings.* Libellés, indices et en-têtes de section de la page des paramètres
Journaux de consentement admin gdpr::gdpr.admin.consent_logs.* Libellés, en-têtes de colonnes et état vide de la page des journaux de consentement
Statistiques admin gdpr::gdpr.admin.stats.* Libellés des cartes statistiques (total_consents, accepted_all, etc.)
Messages gdpr::gdpr.admin.messages.* Messages flash (settings_updated)

Mise à jour

Étape 1 : Remplacer les fichiers

Remplacez le répertoire de l’add-on par la nouvelle version.

Étape 2 : Exécuter les migrations

Étape 3 : Vider les caches

Étape 4 : Vérifier

Visitez RGPD → Paramètres dans le panneau d’administration pour confirmer que tous les paramètres sont intacts et que la bannière fonctionne correctement sur le front-end.

Sauvegarde d’abord : Sauvegardez toujours votre base de données avant d’exécuter des migrations sur un système de production.

Dépannage

La bannière n’apparaît pas sur le front-end

Vérifiez les points suivants :

  • L’add-on est activé dans Admin → Add-ons.
  • Le paramètre gdpr_enabled est défini sur 1 (activé) dans les paramètres.
  • Vous n’avez pas déjà un cookie gdpr_consent défini. Effacez les cookies ou utilisez une fenêtre incognito pour tester.
  • La page est une réponse HTML standard avec une balise </body> (le middleware recherche cette balise pour injecter la bannière).
  • Vous consultez une page front-end, pas une page admin (les routes admin sont exclues).

La bannière apparaît sur les pages admin

Cela ne devrait pas se produire : le middleware ignore explicitement les routes admin via is_admin_panel_route(). Si cela se produit, vérifiez que :

  • La fonction helper is_admin_panel_route() est définie et fonctionne dans votre installation Larapen.
  • Votre préfixe de route admin correspond à la valeur configurée dans config('larapen.core.admin_prefix').

Le cookie de consentement est chiffré / illisible par JavaScript

L’add-on exclut explicitement le cookie gdpr_consent du middleware EncryptCookies de Laravel. Si le cookie est toujours chiffré :

  • Assurez-vous que le GdprServiceProvider est correctement enregistré (l’add-on est actif).
  • Vérifiez qu’aucun middleware ou package personnalisé ne re-chiffre le cookie.
  • Effacez les cookies de votre navigateur et consentez à nouveau : d’anciens cookies chiffrés d’une configuration précédente peuvent persister.

Les journaux de consentement ne sont pas enregistrés

  • Vérifiez que gdpr_log_consents est défini sur 1 (activé) dans les paramètres admin.
  • Vérifiez que la table gdpr_consent_logs existe (exécutez php artisan migrate).
  • Consultez les journaux du serveur pour les erreurs de base de données (ex. problèmes de permissions).

La position de la bannière ne change pas

  • Après avoir changé la position dans les paramètres admin, assurez-vous d’effacer le cookie gdpr_consent (ou utilisez une fenêtre incognito) : la bannière n’apparaît que pour les visiteurs sans cookie de consentement.
  • Videz le cache des vues : php artisan view:clear.

Les catégories ne s’affichent pas dans le panneau de préférences

Seules les catégories activées dans les paramètres admin apparaissent dans le panneau de préférences. La catégorie « Essentiels » apparaît toujours. Pour les catégories optionnelles :

  • Vérifiez que gdpr_category_analytics, gdpr_category_marketing et/ou gdpr_category_preferences sont définis sur 1 dans les paramètres.
  • Les catégories désactivées sont filtrées par le middleware InjectCookieBanner avant le rendu de la vue.

Rétention / purge des journaux

La méthode GdprService::purgeOldLogs() supprime les journaux plus anciens que la période de rétention configurée (log_retention_days, par défaut : 730 jours / 2 ans). Cette méthode n’est pas actuellement raccordée à une tâche planifiée. Pour purger les anciens journaux :

  • Appelez-la manuellement depuis une commande Artisan ou tinker : app(GdprService::class)->purgeOldLogs()
  • Ou ajoutez-la au planificateur de votre application dans routes/console.php :

Erreur de jeton CSRF sur les points de terminaison de consentement

Tous les points de terminaison de consentement (/gdpr/accept-all, etc.) nécessitent un jeton CSRF valide. Le JavaScript de la bannière inclut le jeton depuis la vue Blade rendue. Si vous voyez des erreurs 419 :

  • Assurez-vous que votre session Laravel est correctement configurée.
  • Vérifiez que le groupe middleware web (qui inclut VerifyCsrfToken) est appliqué aux routes de consentement.
  • Si vous utilisez une vue de bannière personnalisée, assurez-vous qu’elle transmet le jeton CSRF dans l’en-tête X-CSRF-TOKEN des requêtes fetch.

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Besoin d'aide ? Créez un ticket de support

Créer un Ticket