Loading module/Application/config/merged/formation.config.php +23 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 => [ [ Loading Loading @@ -797,6 +819,7 @@ return [ FormationInstanceFraisService::class => FormationInstanceFraisServiceFactory::class, FormationGroupeService::class => FormationGroupeServiceFactory::class, FormationThemeService::class => FormationThemeServiceFactory::class, FormationInstanceInscritAssertion::class => FormationInstanceInscritAssertionFactory::class, ], ], 'controllers' => [ Loading module/Application/src/Application/Assertion/FormationInstanceInscritAssertion.php 0 → 100644 +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; } } module/Application/src/Application/Assertion/FormationInstanceInscritAssertionFactory.php 0 → 100644 +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 module/Application/src/Application/Entity/Db/FormationInstanceInscrit.php +7 −1 Original line number Diff line number Diff line Loading @@ -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'; Loading module/Application/src/Application/Provider/Privilege/FormationPrivileges.php +2 −0 Original line number Diff line number Diff line Loading @@ -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
module/Application/config/merged/formation.config.php +23 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 => [ [ Loading Loading @@ -797,6 +819,7 @@ return [ FormationInstanceFraisService::class => FormationInstanceFraisServiceFactory::class, FormationGroupeService::class => FormationGroupeServiceFactory::class, FormationThemeService::class => FormationThemeServiceFactory::class, FormationInstanceInscritAssertion::class => FormationInstanceInscritAssertionFactory::class, ], ], 'controllers' => [ Loading
module/Application/src/Application/Assertion/FormationInstanceInscritAssertion.php 0 → 100644 +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; } }
module/Application/src/Application/Assertion/FormationInstanceInscritAssertionFactory.php 0 → 100644 +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
module/Application/src/Application/Entity/Db/FormationInstanceInscrit.php +7 −1 Original line number Diff line number Diff line Loading @@ -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'; Loading
module/Application/src/Application/Provider/Privilege/FormationPrivileges.php +2 −0 Original line number Diff line number Diff line Loading @@ -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