Parlons de votre projet
Partitech Sonata Extra Bundle

Sonata Extra Bundle : workflow de validation

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é garant...

Contrôles de compatibilité Symfony et Sonata

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 : approbation_action_editeur.png

  • Notification de l'administrateur : notification_approbation_admin.png

  • Vue en liste : liste_admin_approbation.png

  • Vue détaillée : détail_approbation_admin.png

É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_APPROVE peut 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.

Partager cet article