Commit 3c2819e6 authored by David Surville's avatar David Surville
Browse files

Interfaces de gestion des périmètres

parent 02026f12
Loading
Loading
Loading
Loading
Loading
+236 −61
Original line number Diff line number Diff line
<?php

use UnicaenPrivilege\Guard\PrivilegeController;
use UnicaenPrivilege\Provider\Perimetre\Rules\StructureRuleProvider;
use UnicaenPrivilege\Provider\Perimetre\Rules\StructureRuleProviderFactory;
use UnicaenPrivilege\Assertion\Perimetre\AbstractPerimetreAssertionFactory;
use UnicaenPrivilege\Assertion\Perimetre\StructurePerimetreAssertion;
use UnicaenPrivilege\Controller\PerimetreCategorieController;
use UnicaenPrivilege\Controller\PerimetreCategorieControllerFactory;
use UnicaenPrivilege\Controller\PerimetreController;
use UnicaenPrivilege\Controller\PerimetreControllerFactory;
use UnicaenPrivilege\Form\Perimetre\CategorieForm;
use UnicaenPrivilege\Form\Perimetre\CategorieFormFactory;
use UnicaenPrivilege\Form\Perimetre\PerimetreForm;
use UnicaenPrivilege\Form\Perimetre\PerimetreFormFactory;
use UnicaenPrivilege\Provider\Privilege\PerimetrePrivileges;
use UnicaenPrivilege\Service\Perimetre\PerimetreCategorieService;
use UnicaenPrivilege\Service\Perimetre\PerimetreCategorieServiceFactory;
use UnicaenPrivilege\Service\Perimetre\PerimetreService;
use UnicaenPrivilege\Service\Perimetre\PerimetreServiceFactory;
use UnicaenPrivilege\View\Perimetre\PerimetreCategorieViewHelper;

return [
    'unicaen-perimetre' => [
        /**
         * Liste des périmètres (catégories) utilisés et du service associé fournissant la règle de gestion du périmètre.
         * NB: le service fournisseur doit implémenter l'interface @see PerimetreRuleInterface sinon il ne sera pas associé.
         * Liste des assertions utilisées et des services associés.
         */
        'rule_providers'     => [
            'structure' => StructureRuleProvider::class,
        'assertions' => [
            'UnicaenStructure' => StructurePerimetreAssertion::class,
        ],
    ],

    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
            UnicaenPrivilege\Guard\PrivilegeController::class => [
                [
                    'controller' => PerimetreController::class,
                    'action' => [
                        'index',
                    ],
                    'privileges' => [
                        PerimetrePrivileges::CONSULTER,
                    ],
                ],
                [
                    'controller' => PerimetreController::class,
                    'action' => [
                        'ajouter',
                        'modifier'
                    ],
                    'privileges' => [
                        PerimetrePrivileges::EDITER,
                    ],
                ],
                [
                    'controller' => PerimetreController::class,
                    'action' => [
                        'supprimer',
                    ],
                    'privileges' => [
                        PerimetrePrivileges::SUPPRIMER,
                    ],
                ],
                [
                    'controller' => PerimetreCategorieController::class,
                    'action' => [
                        'index',
                        'gerer',
                    ],
                    'privileges' => [
                        PerimetrePrivileges::CONSULTER,
                    ],
                ],
                [
                    'controller' => PerimetreCategorieController::class,
                    'action' => [
                        'activer',
                    ],
                    'privileges' => [
                        PerimetrePrivileges::ATTRIBUER,
                    ],
                ],
                [
                    'controller' => PerimetreCategorieController::class,
                    'action' => [
                        'ajouter',
                        'modifier',
                    ],
                    'privileges' => [
                        PerimetrePrivileges::EDITER,
                    ],
                ],
                [
                    'controller' => PerimetreCategorieController::class,
                    'action' => [
                        'supprimer',
                    ],
                    'privileges' => [
                        PerimetrePrivileges::SUPPRIMER,
                    ],
                ],
            ],
        ],
    ],

//    'router' => [
//        'routes' => [
//            'unicaen-perimetre' => [
//                'type' => Literal::class,
//                'options' => [
//                    'route' => '/perimetre',
//                    'defaults' => [
//                        'controller' => RoleController::class,
//                        'action' => 'index',
//                    ],
//                ],
//                'may_terminate' => true,
//                'child_routes' => [
//                    'ajouter' => [
//                        'type'          => Literal::class,
//                        'options'       => [
//                            'route'       => '/ajouter',
//                            'defaults'    => [
//                                'controller' => RoleController::class,
//                                'action' => 'ajouter',
//                            ],
//                        ],
//                    ],
//                    'modifier' => [
//                        'type'          => Segment::class,
//                        'options'       => [
//                            'route'       => '/modifier/:role',
//                            'defaults'    => [
//                                'controller' => RoleController::class,
//                                'action' => 'modifier',
//                            ],
//                        ],
//                    ],
//                    'supprimer' => [
//                        'type'          => Segment::class,
//                        'options'       => [
//                            'route'       => '/supprimer/:role',
//                            'defaults'    => [
//                                'controller' => RoleController::class,
//                                'action' => 'supprimer',
//                            ],
//                        ],
//                    ],
//                ],
//            ],
//        ],
//    ],
    'router' => [
        'routes' => [
            'unicaen-perimetre' => [
                'type' => Literal::class,
                'options' => [
                    'route' => '/perimetre',
                    'defaults' => [
                        'controller' => PerimetreController::class,
                        'action' => 'index',
                    ],
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'ajouter' => [
                        'type' => Segment::class,
                        'options' => [
                            'route' => '/ajouter/:categorie',
                            'defaults' => [
                                'controller' => PerimetreController::class,
                                'action' => 'ajouter',
                            ],
                            'constraints' => [
                                'categorie' => '\d+',
                            ],
                        ],
                    ],
                    'modifier' => [
                        'type' => Segment::class,
                        'options' => [
                            'route' => '/modifier/:perimetre',
                            'defaults' => [
                                'controller' => PerimetreController::class,
                                'action' => 'modifier',
                            ],
                            'constraints' => [
                                'perimetre' => '\d+',
                            ],
                        ],
                    ],
                    'supprimer' => [
                        'type' => Segment::class,
                        'options' => [
                            'route' => '/supprimer/:perimetre',
                            'defaults' => [
                                'controller' => PerimetreController::class,
                                'action' => 'supprimer',
                            ],
                            'constraints' => [
                                'perimetre' => '\d+',
                            ],
                        ],
                    ],
                    'categorie' => [
                        'type' => Literal::class,
                        'options' => [
                            'route' => '/categorie',
                            'defaults' => [
                                'controller' => PerimetreCategorieController::class,
                                'action' => 'index',
                            ],
                        ],
                        'may_terminate' => true,
                        'child_routes' => [
                            'activer' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/activer/:role/:categorie',
                                    'defaults' => [
                                        'controller' => PerimetreCategorieController::class,
                                        'action' => 'activer',
                                    ],
                                    'constraints' => [
                                        'role' => '\d+',
                                        'categorie' => '\d+',
                                    ],
                                ],
                            ],
                            'ajouter' => [
                                'type' => Literal::class,
                                'options' => [
                                    'route' => '/ajouter',
                                    'defaults' => [
                                        'controller' => PerimetreCategorieController::class,
                                        'action' => 'ajouter',
                                    ],
                                ],
                            ],
                            'gerer' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/gerer/:categorie',
                                    'defaults' => [
                                        'controller' => PerimetreCategorieController::class,
                                        'action' => 'gerer',
                                    ],
                                    'constraints' => [
                                        'categorie' => '\d+',
                                    ],
                                ],
                                'may_terminate' => true,
                            ],
                            'modifier' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/modifier/:categorie',
                                    'defaults' => [
                                        'controller' => PerimetreCategorieController::class,
                                        'action' => 'modifier',
                                    ],
                                    'constraints' => [
                                        'categorie' => '\d+',
                                    ],
                                ],
                                'may_terminate' => true,
                            ],
                            'supprimer' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/supprimer/:categorie',
                                    'defaults' => [
                                        'controller' => PerimetreCategorieController::class,
                                        'action' => 'supprimer',
                                    ],
                                    'constraints' => [
                                        'categorie' => '\d+',
                                    ],
                                ],
                                'may_terminate' => true,
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'service_manager' => [
    'controllers' => [
        'factories' => [
            PerimetreService::class => PerimetreServiceFactory::class,
            PerimetreCategorieService::class => PerimetreCategorieServiceFactory::class,
            StructureRuleProvider::class => StructureRuleProviderFactory::class
            PerimetreCategorieController::class => PerimetreCategorieControllerFactory::class,
            PerimetreController::class => PerimetreControllerFactory::class,
        ],
    ],

    'controllers' => [
    'service_manager' => [
        'factories' => [
            PerimetreCategorieService::class => PerimetreCategorieServiceFactory::class,
            PerimetreService::class => PerimetreServiceFactory::class,
        ],
        'abstract_factories' => [
            AbstractPerimetreAssertionFactory::class,
        ],
    ],

    'form_elements' => [
        'factories' => [
            CategorieForm::class => CategorieFormFactory::class,
            PerimetreForm::class => PerimetreFormFactory::class,
        ],
    ],

    'hydrators' => [
        'factories' => [
        'invokables' => [
            'perimetre' => PerimetreViewHelper::class,
        ],
    ],

    'view_helpers' => [
        'invokables' => [
            'perimetreCategorie' => PerimetreCategorieViewHelper::class,
        ],
    ],
];
+31 −6
Original line number Diff line number Diff line
@@ -126,23 +126,30 @@ return [
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'attribuer' => [
                    'ajouter' => [
                        'type' => Segment::class,
                        'options' => [
                            'route'    => '/attribuer/:role/:privilege',
                            'route' => '/ajouter/:categorie',
                            'defaults' => [
                                'controller' => PrivilegeController::class,
                                'action' => 'attribuer',
                                'action' => 'ajouter',
                            ],
                            'constraints' => [
                                'categorie' => '\d+',
                            ],
                        ],
                    'ajouter' => [
                    ],
                    'attribuer' => [
                        'type' => Segment::class,
                        'options' => [
                            'route' => '/ajouter/:categorie',
                            'route'    => '/attribuer/:role/:privilege',
                            'defaults' => [
                                'controller' => PrivilegeController::class,
                                'action' => 'ajouter',
                                'action' => 'attribuer',
                            ],
                            'constraints' => [
                                'role' => '\d+',
                                'privilege' => '\d+',
                            ],
                        ],
                    ],
@@ -154,6 +161,9 @@ return [
                                'controller' => PrivilegeController::class,
                                'action' => 'modifier',
                            ],
                            'constraints' => [
                                'privilege' => '\d+',
                            ],
                        ],
                    ],
                    'supprimer' => [
@@ -164,6 +174,9 @@ return [
                                'controller' => PrivilegeController::class,
                                'action' => 'supprimer',
                            ],
                            'constraints' => [
                                'privilege' => '\d+',
                            ],
                        ],
                    ],
                    'categorie' => [
@@ -195,6 +208,9 @@ return [
                                        'controller' => PrivilegeCategorieController::class,
                                        'action'     => 'gerer',
                                    ],
                                    'constraints' => [
                                        'categorie' => '\d+',
                                    ],
                                ],
                                'may_terminate' => true,
                            ],
@@ -206,6 +222,9 @@ return [
                                        'controller' => PrivilegeCategorieController::class,
                                        'action'     => 'provider',
                                    ],
                                    'constraints' => [
                                        'categorie' => '\d+',
                                    ],
                                ],
                                'may_terminate' => true,
                            ],
@@ -217,6 +236,9 @@ return [
                                        'controller' => PrivilegeCategorieController::class,
                                        'action'     => 'modifier',
                                    ],
                                    'constraints' => [
                                        'categorie' => '\d+',
                                    ],
                                ],
                                'may_terminate' => true,
                            ],
@@ -228,6 +250,9 @@ return [
                                        'controller' => PrivilegeCategorieController::class,
                                        'action'     => 'supprimer',
                                    ],
                                    'constraints' => [
                                        'categorie' => '\d+',
                                    ],
                                ],
                                'may_terminate' => true,
                            ],
+3 −3
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@

use UnicaenPrivilege\Entity\Db\Perimetre;
use UnicaenPrivilege\Entity\Db\Privilege;
use UnicaenPrivilege\Provider\Privilege\PrivilegePrivileges;
use UnicaenPrivilege\Provider\Perimetre\PerimetrePrivileges;
use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider;
use UnicaenPrivilege\Service\Privilege\PrivilegeService;

@@ -32,7 +32,7 @@ if ($settings['enable_perimetres']) {
             * Important :
             * - le nom de l'assertion au niveau des routes doit respecter le format 'Perimetre\\<nom_de_l_assertion>'
             *   (ex : 'assertion' => 'Perimetre\\Structure')
             * - le service associé doit hériter de @see \UnicaenPrivilege\Assertion\AbstractPerimetreAssertion
             * - le service associé doit hériter de @see \UnicaenPrivilege\Assertion\Perimetre\AbstractPerimetreAssertion
             */
            'assertions' => [
                // 'Structure' => StructureAssertion::class,
@@ -49,7 +49,7 @@ if ($settings['enable_perimetres']) {
                                    'label' => "Gérer les périmètres",
                                    'title' => "Gérer les périmetres",
                                    'route' => 'unicaen-perimetre',
                                    'resource' => PrivilegePrivileges::getResourceId(PrivilegePrivileges::PRIVILEGE_VOIR),
                                    'resource' => PerimetrePrivileges::getResourceId(PerimetrePrivileges::CONSULTER),
                                ],
                            ],
                        ],
+3 −2
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenPrivilege\Assertion\AbstractAssertion;
use UnicaenPrivilege\Entity\Db\PerimetreCategorieInterface;
use UnicaenPrivilege\Entity\Db\PerimetreInterface;
use UnicaenPrivilege\Provider\Perimetre\PerimetreProviderAwareTrait;
use UnicaenPrivilege\Provider\Privilege\Privileges;
use UnicaenPrivilege\Service\Perimetre\PerimetreCategorieServiceAwareTrait;
use UnicaenUtilisateur\Entity\Db\UserInterface;
@@ -17,7 +18,7 @@ use Zend\Router\RouteMatch;
abstract class AbstractPerimetreAssertion extends AbstractAssertion
{
    use EntityManagerAwareTrait;
    use PerimetreCategorieServiceAwareTrait;
    use PerimetreProviderAwareTrait;

    const MODE_ALL = 'all';
    const MODE_AT_LEAST_ONE = 'at_least_one';
@@ -65,7 +66,7 @@ abstract class AbstractPerimetreAssertion extends AbstractAssertion
        }

        // liste des catégories de périmètres et des rôles associés
        $perimetreRoles = $this->perimetreCategorieService->getPerimetresRoles();
        $perimetreRoles = $this->perimetreProvider->getPerimetresRoles();

        // récupération des périmètres associés au rôle de l'utilisateur à partir des périmètres (catégories) associés à l'assertion
        $this->perimetres = array_filter($this->getPerimetres(),
+1 −1
Original line number Diff line number Diff line
@@ -97,7 +97,7 @@ class AbstractPerimetreAssertionFactory implements AbstractFactoryInterface
        $assertion->setServiceAuthorize($authorizeService);
        $assertion->setServiceUserContext($userContextService);
        $assertion->setEntityManager($entityManager);
        $assertion->setPerimetreCategorieService($perimetreCategorieService);
        $assertion->setPerimetreProvider($perimetreCategorieService);

        return $assertion;
    }
Loading