Commit 19adb2d1 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

ajout d'assertion pour le renseignement/visualisation du formulaire de retour de formation

parent 3e73a3c8
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

namespace Application;

use Application\Assertion\FormationInstanceInscritAssertion;
use Application\Assertion\FormationInstanceInscritAssertionFactory;
use Application\Controller\FormationController;
use Application\Controller\FormationControllerFactory;
use Application\Controller\FormationInstanceController;
@@ -57,11 +59,31 @@ use Application\Service\FormationInstance\FormationInstancePresenceServiceFactor
use Application\Service\FormationInstance\FormationInstanceService;
use Application\Service\FormationInstance\FormationInstanceServiceFactory;
use UnicaenPrivilege\Guard\PrivilegeController;
use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider;
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;

return [
    'bjyauthorize' => [
        'resource_providers' => [
            'BjyAuthorize\Provider\Resource\Config' => [
                'Inscrit' => [],
            ],
        ],
        'rule_providers' => [
            PrivilegeRuleProvider::class => [
                'allow' => [
                    [
                        'privileges' => [
                            FormationPrivileges::FORMATION_INSTANCE_QUESTIONNAIRE_VISUALISER,
                            FormationPrivileges::FORMATION_INSTANCE_QUESTIONNAIRE_RENSEIGNER,
                        ],
                        'resources' => ['Inscrit'],
                        'assertion' => FormationInstanceInscritAssertion::class
                    ],
                ],
            ],
        ],
        'guards' => [
            PrivilegeController::class => [
                [
@@ -797,6 +819,7 @@ return [
            FormationInstanceFraisService::class => FormationInstanceFraisServiceFactory::class,
            FormationGroupeService::class => FormationGroupeServiceFactory::class,
            FormationThemeService::class => FormationThemeServiceFactory::class,
            FormationInstanceInscritAssertion::class => FormationInstanceInscritAssertionFactory::class,
        ],
    ],
    'controllers'     => [
+86 −0
Original line number Diff line number Diff line
<?php

namespace Application\Assertion;

use Application\Constant\RoleConstant;
use Application\Entity\Db\Agent;
use Application\Entity\Db\FormationInstanceInscrit;
use Application\Provider\Privilege\AgentPrivileges;
use Application\Provider\Privilege\FormationPrivileges;
use Application\Service\Structure\StructureServiceAwareTrait;
use UnicaenAuthentification\Assertion\AbstractAssertion;
use UnicaenUtilisateur\Service\User\UserServiceAwareTrait;
use Zend\Permissions\Acl\Resource\ResourceInterface;

class FormationInstanceInscritAssertion extends AbstractAssertion
{
    use StructureServiceAwareTrait;
    use UserServiceAwareTrait;

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

        /** @var Agent $entity */

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

        $isGestionnaire = false;
        if ($role->getRoleId() === RoleConstant::GESTIONNAIRE) {
            $structures = [];
            foreach ($entity->getGrades() as $grade) {
                $structures[] = $grade->getStructure();
            }
            foreach ($structures as $structure) {
                $isGestionnaire = $this->getStructureService()->isGestionnaire($structure, $user);
                if ($isGestionnaire) break;
            }
        }
        $isResponsable = false;
        if ($role->getRoleId() === RoleConstant::RESPONSABLE) {
            $structures = [];
            foreach ($entity->getGrades() as $grade) {
                $structures[] = $grade->getStructure();
            }
            foreach ($structures as $structure) {
                $isResponsable = $this->getStructureService()->isResponsable($structure, $user);
                if ($isResponsable) break;
            }
        }

        switch ($privilege) {
            case FormationPrivileges::FORMATION_INSTANCE_QUESTIONNAIRE_VISUALISER:
                switch ($role->getRoleId()) {
                    case RoleConstant::ADMIN_FONC:
                    case RoleConstant::ADMIN_TECH:
                    case RoleConstant::OBSERVATEUR:
                    case RoleConstant::DRH:
                        return true;
                    case RoleConstant::RESPONSABLE:
                        return $isResponsable;
                    case RoleConstant::GESTIONNAIRE:
                        return $isGestionnaire;
                    case RoleConstant::PERSONNEL:
                        return ($entity->getAgent()->getUtilisateur() !== null and $user === $entity->getAgent()->getUtilisateur());
                    default :
                        return false;
                }
            case FormationPrivileges::FORMATION_INSTANCE_QUESTIONNAIRE_RENSEIGNER:
                switch ($role->getRoleId()) {
                    case RoleConstant::ADMIN_FONC:
                    case RoleConstant::ADMIN_TECH:
                        return true;
                    case RoleConstant::PERSONNEL:
                        return ($entity->getAgent()->getUtilisateur() !== null and $user === $entity->getAgent()->getUtilisateur());
                    default :
                        return false;
                }
        }

        return false;
    }
}
+27 −0
Original line number Diff line number Diff line
<?php

namespace Application\Assertion;

use Application\Service\Structure\StructureService;
use Interop\Container\ContainerInterface;
use UnicaenUtilisateur\Service\User\UserService;

class FormationInstanceInscritAssertionFactory {

    public function __invoke(ContainerInterface $container)
    {
        /**
         * @var StructureService $structureService
         * @var UserService $userService
         */
        $structureService = $container->get(StructureService::class);
        $userService = $container->get(UserService::class);

        /** @var FormationInstanceInscritAssertion $assertion */
        $assertion = new FormationInstanceInscritAssertion();
        $assertion->setStructureService($structureService);
        $assertion->setUserService($userService);

        return $assertion;
    }
}
 No newline at end of file
+7 −1
Original line number Diff line number Diff line
@@ -8,10 +8,16 @@ use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use UnicaenUtilisateur\Entity\HistoriqueAwareInterface;
use UnicaenUtilisateur\Entity\HistoriqueAwareTrait;
use Zend\Permissions\Acl\Resource\ResourceInterface;

class FormationInstanceInscrit implements HistoriqueAwareInterface, HasAgentInterface {
class FormationInstanceInscrit implements HistoriqueAwareInterface, HasAgentInterface, ResourceInterface {
    use HistoriqueAwareTrait;

    public function getResourceId()
    {
        return 'Inscrit';
    }

    const PRINCIPALE = 'principale';
    const COMPLEMENTAIRE = 'complementaire';

+2 −0
Original line number Diff line number Diff line
@@ -18,4 +18,6 @@ class FormationPrivileges extends Privileges
    const FORMATION_INSTANCE_MODIFIER = 'formation-formation_instance_modifier';
    const FORMATION_INSTANCE_HISTORISER = 'formation-formation_instance_historiser';
    const FORMATION_INSTANCE_SUPPRIMER = 'formation-formation_instance_supprimer';
    const FORMATION_INSTANCE_QUESTIONNAIRE_VISUALISER = 'formation-formation_instance_questionnaire_visualiser';
    const FORMATION_INSTANCE_QUESTIONNAIRE_RENSEIGNER = 'formation-formation_instance_questionnaire_renseigner';
}
 No newline at end of file
Loading