Vue d'ensemble
Le workflow de validation de Sonata Extra enregistre les actions réalisées dans l’administration, offrant une vue d'ensemble complète des activités, des ressources impliquées, des descriptions et des utilisateurs. Cette fonctionnalité garantit que les actions sont enregistrées mais non appliquées immédiatement. Elles nécessitent plutôt une validation par un utilisateur avec le ROLE_APPROVE permission.
Fonctionnalités
- Journalisation des actions : Enregistre chaque action mais n'applique pas les modifications immédiatement.
- Approbation basée sur le rôle : Les actions nécessitent l'approbation d'un utilisateur disposant de
ROLE_APPROVE. - Alerte de modifications en attente : Un badge de notification rouge dans l'interface d'administration alerte les administrateurs des modifications en attente d'approbation.
- Vue d'action détaillée : Affiche le type d'action, la ressource, la description, l'utilisateur et la date dans la vue en liste.
- Boutons d'approbation et de détail : Permet aux administrateurs d'approuver les modifications ou de consulter des informations détaillées.
- Fonctionnalité de purge : Une option pour purger les modifications en attente.
- Vue détaillée des modifications : Affiche les champs et valeurs impactés pour chaque action.
Écrans
-
Action de l'éditeur :

-
Notification de l'administrateur :

-
Vue en liste :

-
Vue détaillée :

Étapes de configuration
Ajouter des écouteurs d'événements
sonata-extra.doctrine_activity_listener:
class: Partitech\SonataExtra\EventListener\DoctrineActivityListener
tags:
- { name: doctrine.event_listener, event: prePersist }
- { name: doctrine.event_listener, event: preUpdate }
- { name: doctrine.event_listener, event: preRemove }
- { name: doctrine.event_listener, event: onFlush }
- { name: kernel.event_listener, event: sonata.admin.event.batch_action.pre_batch_action, method: onPreBatchAction }
sonata-extra.configure_menu_listener:
class: Partitech\SonataExtra\EventListener\ConfigureMenuListener
tags:
- { name: kernel.event_listener, event: sonata.admin.event.configure.menu.sidebar, method: onMenuConfigure }
arguments:
- "@service_container"
- "@doctrine.orm.entity_manager"
- "@request_stack"
- "@security.authorization_checker"
Configurer l'exclusion des entités
Vous pouvez exclure n'importe quelle entité du workflow. Par défaut, vous devriez exclure vos entités SonataMediaMedia et User.
parameters:
sonata_approve_excluded_entities:
- 'App\Entity\BackofficeUser'
- 'App\Entity\SonataMediaMedia'
- 'Partitech\SonataExtra\Entity\Slider'
Configurer le menu
Par défaut, le menu d'approbation est inséré dynamiquement à la racine du menu avec une alerte visuelle rouge. Pour éviter l'affichage en double lorsque le groupe de menus est ouvert, vous pouvez lister les éléments de menu qui masqueront l'alerte racine.
parameters:
sonata_approve_menu:
- 'admin_app_approval'
- 'admin_app_adminactivitylog'
- 'admin_app_sonatamediamedia'
- 'admin_app_backofficeuser'
- 'admin_app_sonatapagesite'
Configurer les rôles
Tous les utilisateurs qui n'ont pas le rôle ROLE_APPROVE seront dans la règle de workflow. Si vous voulez obtenir le journal des activités administratives sans le workflow d'approbation, ajoutez simplement ROLE_APPROVE à votre utilisateur administrateur par défaut.
security:
role_hierarchy:
ROLE_EDITOR:
- ROLE_USER
- ROLE_SONATA_ADMIN
- ROLE_ADMIN_USERADMIN_ALL
- ROLE_ADMIN_ADMIN_ACTIVITY_LOG_ALL
- ROLE_ADMIN_ADMIN_APPROVAL_LOG_ALL
- ROLE_ADMIN_USERADMIN_ALL
- ROLE_ADMIN_REDIRECTION_ALL
- ROLE_SONATA_EXTRA_ADMIN_SLIDER_ALL
- ROLE_SONATA_EXTRA_ADMIN_SLIDER_SLIDES_ALL
- ROLE_SONATA_EXTRA_ADMIN_FAQ_CATEGORY_ALL
- ROLE_SONATA_EXTRA_ADMIN_FAQ_QUESTION_ALL
- ROLE_SONATA_USER_ADMIN_USER_ALL
- ROLE_SONATA_MEDIA_ADMIN_MEDIA_ALL
- ROLE_SONATA_MEDIA_ADMIN_GALLERY_ALL
- ROLE_SONATA_MEDIA_ADMIN_GALLERY_ITEM_ALL
- ROLE_SONATA_PAGE_ADMIN_PAGE_ALL
- ROLE_SONATA_PAGE_ADMIN_BLOCK_ALL
- ROLE_SONATA_PAGE_ADMIN_SHARED_BLOCK_ALL
- ROLE_SONATA_PAGE_ADMIN_SNAPSHOT_ALL
- ROLE_SONATA_PAGE_ADMIN_SITE_ALL
- ROLE_PRODIGIOUS_SONATA_MENU_ADMIN_MENU_ALL
- ROLE_PRODIGIOUS_SONATA_MENU_ADMIN_MENU_ITEM_ALL
ROLE_ADMIN:
- ROLE_USER
- ROLE_SONATA_ADMIN
- ROLE_APPROVE
- ROLE_EDITOR
- ROLE_ADMIN_ADMIN_ACTIVITY_LOG_ALL
- ROLE_ADMIN_ADMIN_APPROVAL_LOG_ALL
-
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
Utilisation et flux de travail
- Utilisateurs non approuvés : Utilisateurs sans
ROLE_APPROVEpeut effectuer des actions, mais celles-ci seront enregistrées et en attente d'approbation. - Approbation requise : Une notification dans l'outil 'Modifications en attente' alerte les administrateurs des actions nécessitant une approbation.
- Processus d'approbation : Les administrateurs ayant le RÔLE_APPROUVER peuvent consulter les détails et soit approuver, soit rejeter les modifications.
- Option de purge : Les administrateurs peuvent utiliser le bouton de purge pour effacer les modifications en attente.
Conclusion
Le flux de travail d'approbation SonataExtra renforce le contrôle et la sécurité en garantissant que toutes les modifications sont enregistrées et nécessitent l'approbation du personnel autorisé. Cette fonctionnalité est cruciale pour maintenir l'intégrité et la responsabilité au sein de l'interface d'administration.
Adapter l’exemple à la version installée
Les exemples Symfony et Sonata restent attachés aux versions indiquées dans l’article. Symfony 4.x et Symfony 6.2 ne sont plus maintenus : pour un projet actuel, utilisez une branche maintenue et la documentation correspondant exactement à vos dépendances.
php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle
Avant de reprendre le code, contrôlez les signatures, les services, les routes et les templates concernés. Ajoutez ensuite un test fonctionnel couvrant les autorisations, le code HTTP et le résultat visible.
Référence : versions Symfony maintenues.