Commit f6493953 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Début de mise en place du suivi

Possibilité de placer les privilèges et assertions directement dans les routes
parent 8e99472e
Loading
Loading
Loading
Loading
+30 −5
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ class ConfigFactory
        $paths = Glob::glob($dir . '/config/{,*.}{config}.php', Glob::GLOB_BRACE);

        $config      = Factory::fromFiles($paths);
        $routeGuards = [];

        $finalConfig = [
            'doctrine' => [
@@ -44,14 +45,14 @@ class ConfigFactory
        if (isset($config['console'])) {
            $finalConfig['console']['router']['routes'] = [];
            foreach ($config['console'] as $cr => $cc) {
                $finalConfig['console']['router']['routes'][$cr] = self::routeSimplified($cc, true);
                $finalConfig['console']['router']['routes'][$cr] = self::routeSimplified($cc, $routeGuards, true);
            }
        }

        if (isset($config['routes'])) {
            $finalConfig['router']['routes'] = [];
            foreach ($config['routes'] as $cr => $cc) {
                $finalConfig['router']['routes'][$cr] = self::routeSimplified($cc, false);
                $finalConfig['router']['routes'][$cr] = self::routeSimplified($cc, $routeGuards, false);
            }
        }

@@ -73,6 +74,12 @@ class ConfigFactory
            ];
        }

        if (!empty($routeGuards)) {
            foreach ($routeGuards as $routeGuard) {
                $finalConfig['bjyauthorize']['guards'][PrivilegeController::class][] = $routeGuard;
            }
        }

        if (isset($config['rules'])) {
            if (!isset($finalConfig['bjyauthorize'])) $finalConfig['bjyauthorize'] = [];
            $finalConfig['bjyauthorize']['rule_providers'] = [
@@ -134,8 +141,26 @@ class ConfigFactory



    public static function routeSimplified(array $config, bool $isConsole = false): array
    public static function routeSimplified(array $config, array &$routeGuards, bool $isConsole = false): array
    {
        /* Détection des guards */
        if (isset($config['controller']) && isset($config['action']) && isset($config['privileges'])) {
            $routeGuard = [
                'controller' => $config['controller'],
                'action'     => $config['action'],
                'privileges' => $config['privileges'],
            ];
            unset($config['privileges']);

            if (isset($config['assertion'])) {
                $routeGuard['assertion'] = $config['assertion'];

                unset($config['assertion']);
            }

            $routeGuards[] = $routeGuard;
        }

        /* On remonte ces params dans le sous-menu options */
        $optionsParams = ['route', 'defaults', 'constraints'];
        foreach ($optionsParams as $param) {
@@ -169,7 +194,7 @@ class ConfigFactory
        /* Si il y a des routes filles, on les parse aussi */
        if (isset($config['child_routes'])) {
            foreach ($config['child_routes'] as $sRoute => $sConfig) {
                $config['child_routes'][$sRoute] = self::routeSimplified($sConfig);
                $config['child_routes'][$sRoute] = self::routeSimplified($sConfig, $routeGuards);
            }
        }

+23 −41
Original line number Diff line number Diff line
@@ -5,10 +5,7 @@ namespace Mission;
use Application\Entity\Db\WfEtape;
use Application\Provider\Privilege\Privileges;
use Mission\Controller\MissionController;
use Mission\Controller\TauxController;
use Mission\Controller\MissionTypeController;
use Mission\Service\TauxService;
use Mission\Service\TauxServiceFactory;
use Mission\Service\MissionTypeService;
use Mission\Service\MissionTypeServiceFactory;
use UnicaenAuth\Assertion\AssertionFactory;
@@ -23,12 +20,16 @@ return [
                    'route'         => '/:intervenant/missions',
                    'controller'    => MissionController::class,
                    'action'        => 'index',
                    'privileges'    => Privileges::MISSION_VISUALISATION,
                    //'assertion'  => Assertion\MissionAssertion::class,
                    'may_terminate' => true,
                    'child_routes'  => [
                        'modification' => [
                            'route'      => '/modification',
                            'controller' => MissionController::class,
                            'action'     => 'modification',
                            'privileges' => Privileges::MISSION_EDITION,
                            //'assertion'  => Assertion\MissionAssertion::class,
                        ],
                    ],
                ],
@@ -42,36 +43,52 @@ return [
                    'route'      => '/liste/:intervenant',
                    'controller' => MissionController::class,
                    'action'     => 'liste',
                    'privileges' => Privileges::MISSION_VISUALISATION,
                    //'assertion'  => Assertion\MissionAssertion::class,
                ],
                'get'            => [
                    'route'      => '/get/:mission',
                    'controller' => MissionController::class,
                    'action'     => 'get',
                    'privileges' => Privileges::MISSION_VISUALISATION,
                    //'assertion'  => Assertion\MissionAssertion::class,
                ],
                'ajout'          => [
                    'route'      => '/ajout/:intervenant',
                    'controller' => MissionController::class,
                    'action'     => 'ajout',
                    'privileges' => Privileges::MISSION_EDITION,
                    //'assertion'  => Assertion\MissionAssertion::class,
                ],
                'saisie'         => [
                    'route'      => '/saisie/:mission',
                    'controller' => MissionController::class,
                    'action'     => 'saisie',
                    'privileges' => Privileges::MISSION_EDITION,
                    //'assertion'  => Assertion\MissionAssertion::class,
                ],
                'suivi'          => [
                    'route'      => '/suivi/:intervenant',
                    'controller' => MissionController::class,
                    'action'     => 'suivi',
                ],
                'supprimer'      => [
                    'route'      => '/supprimer/:mission',
                    'controller' => MissionController::class,
                    'action'     => 'supprimer',
                    'privileges' => Privileges::MISSION_EDITION,
                ],
                'valider'        => [
                    'route'      => '/valider/:mission',
                    'controller' => MissionController::class,
                    'action'     => 'valider',
                    'privileges' => Privileges::MISSION_VALIDATION,
                ],
                'devalider'      => [
                    'route'      => '/devalider/:mission',
                    'controller' => MissionController::class,
                    'action'     => 'devalider',
                    'privileges' => Privileges::MISSION_DEVALIDATION,
                ],
                'volume-horaire' => [
                    'route'         => '/volume-horaire',
@@ -82,16 +99,19 @@ return [
                            'route'      => '/supprimer/:volumeHoraireMission',
                            'controller' => MissionController::class,
                            'action'     => 'volume-horaire-supprimer',
                            'privileges' => Privileges::MISSION_EDITION,
                        ],
                        'valider'   => [
                            'route'      => '/valider/:volumeHoraireMission',
                            'controller' => MissionController::class,
                            'action'     => 'volume-horaire-valider',
                            'privileges' => Privileges::MISSION_VALIDATION,
                        ],
                        'devalider' => [
                            'route'      => '/devalider/:volumeHoraireMission',
                            'controller' => MissionController::class,
                            'action'     => 'volume-horaire-devalider',
                            'privileges' => Privileges::MISSION_DEVALIDATION,
                        ],
                    ],
                ],
@@ -155,44 +175,6 @@ return [
    ],

    'guards' => [
        [
            'controller' => MissionController::class,
            'action'     => ['index', 'get', 'liste'],
            'privileges' => [
                Privileges::MISSION_VISUALISATION,
            ],
            //'assertion'  => Assertion\MissionAssertion::class,
        ],
        [
            'controller' => MissionController::class,
            'action'     => ['ajout', 'saisie'],
            'privileges' => [
                Privileges::MISSION_EDITION,
            ],
            //'assertion'  => Assertion\MissionAssertion::class,
        ],
        [
            'controller' => MissionController::class,
            'action'     => ['supprimer', 'volume-horaire-supprimer'],
            'privileges' => [
                Privileges::MISSION_EDITION,
            ],
        ],
        [
            'controller' => MissionController::class,
            'action'     => ['valider', 'volume-horaire-valider'],
            'privileges' => [
                Privileges::MISSION_VALIDATION,
            ],
        ],
        [
            'controller' => MissionController::class,
            'action'     => ['devalider', 'volume-horaire-devalider'],
            'privileges' => [
                Privileges::MISSION_DEVALIDATION,
            ],
            //'assertion'  => Assertion\MissionAssertion::class,
        ],
        [
            'controller' => MissionTypeController::class,
            'action'     => ['index'],
+10 −0
Original line number Diff line number Diff line
@@ -50,6 +50,16 @@ class MissionController extends AbstractController



    public function suiviAction()
    {
        /* @var $intervenant Intervenant */
        $intervenant = $this->getEvent()->getParam('intervenant');

        return compact('intervenant');
    }



    /**
     * Ajoute une nouvelle mission (form)
     *
+21 −0
Original line number Diff line number Diff line
<?php
/**
 * @var $this              \Application\View\Renderer\PhpRenderer
 * @var $intervenant       \Application\Entity\Db\Intervenant
 */

use Application\Entity\Db\WfEtape;

$title     = 'Suivi de missions';
$nextEtape = WfEtape::CODE_SERVICE_SAISIE;

$this->intervenant($intervenant)->renderTitle($title);

echo $this->messenger()->addCurrentMessagesFromFlashMessenger();

echo $this->vue('mission/suivi', [
    'intervenant' => $intervenant->getId(),
]);

echo '<br />';
echo $this->feuilleDeRoute($intervenant)->renderNav($nextEtape);
 No newline at end of file