Commit 2d033d70 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Début de gestion fine des affectation de mission specifique

parent e027cf51
Loading
Loading
Loading
Loading
+1 −1
Changes for module/Application/config/merged/agent.config.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -14,8 +14,8 @@ use Application\Form\Agent\AgentHydratorFactory;
use Application\Provider\Privilege\AgentPrivileges;
use Application\Service\Agent\AgentService;
use Application\Service\Agent\AgentServiceFactory;
use Application\View\Helper\AgentViewHelper;
use Application\View\Helper\AgentStatutViewHelper;
use Application\View\Helper\AgentViewHelper;
use UnicaenAuth\Guard\PrivilegeController;
use Zend\Mvc\Router\Http\Literal;
use Zend\Mvc\Router\Http\Segment;
+142 −0
Changes for module/Application/config/merged/mission-specifique.config.php: 142 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application;

use Application\Controller\MissionSpecifique\MissionSpecifiqueController;
use Application\Controller\MissionSpecifique\MissionSpecifiqueControllerFactory;
use Application\Form\AgentMissionSpecifique\AgentMissionSpecifiqueForm;
use Application\Form\AgentMissionSpecifique\AgentMissionSpecifiqueFormFactory;
use Application\Form\AgentMissionSpecifique\AgentMissionSpecifiqueHydrator;
use Application\Form\AgentMissionSpecifique\AgentMissionSpecifiqueHydratorFactory;
use Application\Provider\Privilege\AgentPrivileges;
use Application\Service\MissionSpecifique\MissionSpecifiqueService;
use Application\Service\MissionSpecifique\MissionSpecifiqueServiceFactory;
use UnicaenAuth\Guard\PrivilegeController;
use Zend\Mvc\Router\Http\Literal;
use Zend\Mvc\Router\Http\Segment;

return [
    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => MissionSpecifiqueController::class,
                    'action' => [
                        'affectation',
                    ],
                    'privileges' => [
                        AgentPrivileges::AFFICHER,
                    ],
                ],
                [
                    'controller' => MissionSpecifiqueController::class,
                    'action' => [
                        'ajouter',
                        'editer',
                        'historiser',
                        'restaurer',
                        'detruire',
                    ],
                    'privileges' => [
                        AgentPrivileges::EDITER,
                    ],
                ],
            ],
        ],
    ],

    'router'          => [
        'routes' => [
            'agent-mission-specifique' => [
                'type'  => Literal::class,
                'options' => [
                    'route'    => '/agent-mission-specifique',
                    'defaults' => [
                        'controller' => MissionSpecifiqueController::class,
                        'action'     => 'affectation',
                    ],
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'ajouter' => [
                        'type'  => Literal::class,
                        'options' => [
                            'route'    => '/ajouter',
                            'defaults' => [
                                'controller' => MissionSpecifiqueController::class,
                                'action'     => 'ajouter',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'editer' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/editer/:affectation',
                            'defaults' => [
                                'controller' => MissionSpecifiqueController::class,
                                'action'     => 'editer',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'historiser' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/historiser/:affectation',
                            'defaults' => [
                                'controller' => MissionSpecifiqueController::class,
                                'action'     => 'historiser',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'restaurer' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/restaurer/:affectation',
                            'defaults' => [
                                'controller' => MissionSpecifiqueController::class,
                                'action'     => 'restaurer',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'detruire' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/detruire/:affectation',
                            'defaults' => [
                                'controller' => MissionSpecifiqueController::class,
                                'action'     => 'detruire',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                ],
            ],
        ],
    ],

    'service_manager' => [
        'factories' => [
            MissionSpecifiqueService::class => MissionSpecifiqueServiceFactory::class,
        ],
    ],
    'controllers'     => [
        'factories' => [
            MissionSpecifiqueController::class => MissionSpecifiqueControllerFactory::class,
        ],
    ],
    'form_elements' => [
        'factories' => [
            AgentMissionSpecifiqueForm::class => AgentMissionSpecifiqueFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            AgentMissionSpecifiqueHydrator::class => AgentMissionSpecifiqueHydratorFactory::class,
        ],
    ]

];
 No newline at end of file
+21 −2
Changes for module/Application/config/merged/structure.config.php: 21 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

namespace Application;

use Application\Assertion\EditionStructureAssertion;
use Application\Assertion\EditionStructureAssertionFactory;
use Application\Controller\Structure\StructureController;
use Application\Controller\Structure\StructureControllerFactory;
use Application\Form\Structure\StructureForm;
@@ -11,6 +13,7 @@ use Application\Provider\Privilege\StructurePrivileges;
use Application\Service\Structure\StructureService;
use Application\Service\Structure\StructureServiceFactory;
use UnicaenAuth\Guard\PrivilegeController;
use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider;
use Zend\Mvc\Router\Http\Literal;
use Zend\Mvc\Router\Http\Segment;

@@ -42,8 +45,23 @@ return [
                    'action' => [
                        'editer-description'
                    ],
                    'privileges' => [
                        StructurePrivileges::EDITER,
                    'assertion'  => EditionStructureAssertion::class,
                    'privileges' => StructurePrivileges::EDITER,
                ],
            ],
        ],
        'resource_providers' => [
            'BjyAuthorize\Provider\Resource\Config' => [
                'structure' => [],
            ],
        ],
        'rule_providers' => [
            PrivilegeRuleProvider::class => [
                'allow' => [
                    [
                        'privileges' => StructurePrivileges::EDITER,
                        //'resources' => ['structure'],
                        'assertion' => EditionStructureAssertion::class,
                    ],
                ],
            ],
@@ -106,6 +124,7 @@ return [

    'service_manager' => [
        'factories' => [
            EditionStructureAssertion::class => EditionStructureAssertionFactory::class,
            StructureService::class => StructureServiceFactory::class,
        ],
    ],
+44 −0
Changes for module/Application/src/Application/Assertion/EditionStructureAssertion.php: 44 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Assertion;

use Application\Controller\Structure\StructureController;
use Application\Entity\Db\Structure;
use UnicaenAuth\Assertion\AbstractAssertion;
use Utilisateur\Entity\Db\Role;
use Utilisateur\Service\User\UserServiceAwareTrait;
use Zend\Permissions\Acl\Resource\ResourceInterface;

class EditionStructureAssertion extends AbstractAssertion {
    use UserServiceAwareTrait;

    protected function assertEntity(ResourceInterface $entity = null, $privilege = null) {
        if ($entity instanceof Structure) {
            return true;
        }
        return false;
    }

    protected function assertController($controller, $action = null, $privilege = null) {

        $role = $this->getUserService()->getConnectedRole();

        if ($controller === StructureController::class) {

            if ($role->getRoleId() === Role::ADMIN_FONC OR $role->getRoleId() === Role::ADMIN_TECH) {
                return false;
            }

            switch($action) {
                case 'editer-description' :
                    if ($role->getRoleId() === Role::GESTIONNAIRE) {
                        return true;
                    }
                    return false;
                default:
                    return true;
            }
        }
        return false;
    }
}
 No newline at end of file
+23 −0
Changes for module/Application/src/Application/Assertion/EditionStructureAssertionFactory.php: 23 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Assertion;

use Utilisateur\Service\User\UserService;
use Zend\ServiceManager\ServiceLocatorInterface;

class EditionStructureAssertionFactory {

    public function __invoke(ServiceLocatorInterface $serviceLocator)
    {
        /**
         * @var UserService $userService
         */
        $userService = $serviceLocator->get(UserService::class);

        /** @var EditionStructureAssertion $assertion */
        $assertion = new EditionStructureAssertion();
        $assertion->setUserService($userService);
        return $assertion;
    }

}
 No newline at end of file
Loading