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

Mise en place des privileges ok, ajout lib composantes aux libelles de missions pour le suivi

polish
parent e99e617b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
<template>
    <u-calendar :date="date" @changeDate="changeDate" @addEvent="ajouter" :can-add-event="true" :events="suivi"/>
    <u-calendar :date="date" @changeDate="changeDate" @addEvent="ajouter" :can-add-event="canAddMission" :events="suivi"/>
</template>

<script>
@@ -13,6 +13,7 @@ export default {
    name: 'Suivi',
    props: {
        intervenant: {type: Number, required: true},
        canAddMission: {type: Boolean, required: true},
    },
    mounted()
    {
+22 −9
Original line number Diff line number Diff line
@@ -5,7 +5,6 @@ namespace Mission;
use Application\Entity\Db\WfEtape;
use Application\Provider\Privilege\Privileges;
use UnicaenPrivilege\Assertion\AssertionFactory;
use UnicaenPrivilege\Guard\PrivilegeController;


return [
@@ -16,7 +15,7 @@ return [
                    'route'      => '/:intervenant/missions-suivi',
                    'controller' => Controller\SuiviController::class,
                    'action'     => 'index',
                    'privileges' => Privileges::MISSION_EDITION_REALISE,
                    'privileges' => Privileges::MISSION_VISUALISATION,
                    //'assertion'  => Assertion\MissionAssertion::class,
                ],
            ],
@@ -31,42 +30,41 @@ return [
                            'controller' => Controller\SuiviController::class,
                            'action'     => 'liste',
                            'privileges' => Privileges::MISSION_VISUALISATION,
                            //'assertion'  => Assertion\MissionAssertion::class,
                        ],
                        'ajout'   => [
                            'route'      => '/ajout/:intervenant/:date',
                            'controller' => Controller\SuiviController::class,
                            'action'     => 'ajout',
                            'privileges' => Privileges::MISSION_EDITION_REALISE,
                            //'assertion'  => Assertion\MissionAssertion::class,
//                            'assertion'  => Assertion\SuiviAssertion::class,
                        ],
                        'modifier'  => [
                            'route'      => '/modifier/:volumeHoraireMission',
                            'controller' => Controller\SuiviController::class,
                            'action'     => 'modifier',
                            'privileges' => Privileges::MISSION_EDITION_REALISE,
                            //'assertion'  => Assertion\MissionAssertion::class,
//                            'assertion'  => Assertion\SuiviAssertion::class,
                        ],
                        'supprimer' => [
                            'route'      => '/supprimer/:volumeHoraireMission',
                            'controller' => Controller\SuiviController::class,
                            'action'     => 'supprimer',
                            'privileges' => Privileges::MISSION_EDITION_REALISE,
                            //'assertion'  => Assertion\MissionAssertion::class,
//                            'assertion'  => Assertion\SuiviAssertion::class,
                        ],
                        'valider'   => [
                            'route'      => '/valider/:volumeHoraireMission',
                            'controller' => Controller\SuiviController::class,
                            'action'     => 'valider',
                            'privileges' => Privileges::MISSION_VALIDATION_REALISE,
                            //'assertion'  => Assertion\MissionAssertion::class,
//                            'assertion'  => Assertion\SuiviAssertion::class,
                        ],
                        'devalider' => [
                            'route'      => '/devalider/:volumeHoraireMission',
                            'controller' => Controller\SuiviController::class,
                            'action'     => 'devalider',
                            'privileges' => Privileges::MISSION_DEVALIDATION_REALISE,
                            //'assertion'  => Assertion\MissionAssertion::class,
//                            'assertion'  => Assertion\SuiviAssertion::class,
                        ],
                    ],
                ],
@@ -94,6 +92,20 @@ return [
        ],
    ],


    'rules' => [
        [
            'privileges' => [
                Privileges::MISSION_EDITION_REALISE,
                Privileges::MISSION_VALIDATION_REALISE,
                Privileges::MISSION_DEVALIDATION_REALISE
            ],
            'resources' => 'VolumeHoraireMission',
            'assertion' => Assertion\SuiviAssertion::class,
        ],
    ],


    'controllers' => [
        Controller\SuiviController::class => Controller\SuiviControllerFactory::class,
    ],
@@ -102,6 +114,7 @@ return [
        Form\MissionSuiviForm::class => Form\MissionSuiviFormFactory::class,
    ],

    'view_helpers' => [
    'services' => [
        Assertion\SuiviAssertion::class => AssertionFactory::class,
    ],
];
 No newline at end of file
+65 −45
Original line number Diff line number Diff line
@@ -4,7 +4,10 @@ namespace Mission\Assertion;

use Application\Acl\Role;
use Application\Entity\Db\Intervenant;
use Application\Entity\Db\Structure;
use Application\Provider\Privilege\Privileges;
use Mission\Entity\Db\Mission;
use Mission\Entity\Db\VolumeHoraireMission;
use UnicaenPrivilege\Assertion\AbstractAssertion;
use Laminas\Permissions\Acl\Resource\ResourceInterface;

@@ -17,81 +20,98 @@ use Laminas\Permissions\Acl\Resource\ResourceInterface;
class SuiviAssertion extends AbstractAssertion
{

    /* ---- Routage général ---- */
    public function __invoke(array $page) // gestion des visibilités de menus
    protected function assertEntity(ResourceInterface $entity = null, $privilege = null)
    {
        return $this->assertPage($page);
    }
        /** @var Role $role */
        $role = $this->getRole();

        // Si le rôle n'est pas renseigné alors on s'en va...
        if (!$role instanceof Role) return false;

        // pareil si le rôle ne possède pas le privilège adéquat
        if ($privilege && !$role->hasPrivilege($privilege)) return false;

    protected function assertPage(array $page)
    {
        $role = $this->getRole();
        /* @var $role Role */
        switch (true) {
            case $entity instanceof VolumeHoraireMission:
                switch ($privilege) {
                    case Privileges::MISSION_EDITION_REALISE: // Attention à bien avoir généré le fournisseur de privilèges si vous utilisez la gestion des privilèges d'UnicaenAuth
                        return $this->assertVolumeHoraireEdition($role, $entity);
                    case Privileges::MISSION_VALIDATION_REALISE:
                        return $this->assertVolumeHoraireValidation($role, $entity);
                    case Privileges::MISSION_DEVALIDATION_REALISE:
                        return $this->assertVolumeHoraireDevalidation($role, $entity);
                }
                break;
        }

        if (!$role) return false;
        return true;
    }

        $intervenant = null;
        if (isset($page['workflow-etape-code'])) {
            $etape = $page['workflow-etape-code'];

            /** @var Intervenant $intervenant */
            $intervenant = $this->getMvcEvent()->getParam('intervenant');

            if (!$intervenant) return false;

            return $this->assertVisualisationMission($role, $intervenant);
    protected function assertVolumeHoraireEdition(Role $role, VolumeHoraireMission $vhm)
    {
        return $this->asserts([
            $vhm->canEdit(),
            $this->assertVolumeHoraire($role, $vhm),
        ]);
    }

        return false;


    protected function assertVolumeHoraireValidation(Role $role, VolumeHoraireMission $vhm)
    {
        return $this->asserts([
            $vhm->canValider(),
            $this->assertVolumeHoraire($role, $vhm),
        ]);
    }



    /**
     * Exemple
     */
    protected function assertEntity(ResourceInterface $entity = null, $privilege = null)
    protected function assertVolumeHoraireDevalidation(Role $role, VolumeHoraireMission $vhm)
    {
        return $this->asserts([
            $vhm->canDevalider(),
            $this->assertVolumeHoraire($role, $vhm),
        ]);
    }

//        switch (true) {
//            case $entity instanceof VotreEntite:
//                switch ($privilege) {
//                    case Privileges::VOTRE_PRIVILEGE: // Attention à bien avoir généré le fournisseur de privilèges si vous utilisez la gestion des privilèges d'UnicaenAuth
//                        return $this->assertVotreAssertion($role, $entity);
//                }
//                break;
//        }

        return true;

    protected function assertVolumeHoraire(Role $role, VolumeHoraireMission $vhm)
    {
        return $this->asserts([
            $this->assertMission($role, $vhm->getMission())
        ]);
    }



    protected function assertController($controller, $action = null, $privilege = null)
    protected function assertMission(Role $role, Mission $mission)
    {
        $role = $this->getRole();

        // Si le rôle n'est pas renseigné alors on s'en va...
        if (!$role instanceof Role) return false;
        // pareil si le rôle ne possède pas le privilège adéquat
        if ($privilege && !$role->hasPrivilege($privilege)) return false;
        return $this->asserts([
            $this->assertStructure($role, $mission->getStructure())
        ]);
    }

        /* @var $intervenant Intervenant */
        $intervenant = $this->getMvcEvent()->getParam('intervenant');

        if (!$intervenant) return false;

        // Si c'est bon alors on affine...
        switch ($action) {
            case 'index':
                return $this->assertVisualisationMission($role, $intervenant);
            break;
    protected function assertStructure(Role $role, ?Structure $structure)
    {
        // Pas de structure => mission en cours de saisie => OK
        if (!$structure) {
            return true;
        }

        // Pas de périmètre structure => OK
        if (!$role->getStructure()) {
            return true;
        }

        // OK si =
        return $role->getStructure() === $structure;
    }

}
 No newline at end of file
+0 −20
Original line number Diff line number Diff line
@@ -49,26 +49,6 @@ class WorkflowAssertion extends AbstractAssertion



    /**
     * Exemple
     */
    protected function assertEntity(ResourceInterface $entity = null, $privilege = null)
    {

//        switch (true) {
//            case $entity instanceof VotreEntite:
//                switch ($privilege) {
//                    case Privileges::VOTRE_PRIVILEGE: // Attention à bien avoir généré le fournisseur de privilèges si vous utilisez la gestion des privilèges d'UnicaenAuth
//                        return $this->assertVotreAssertion($role, $entity);
//                }
//                break;
//        }

        return true;
    }



    protected function assertController($controller, $action = null, $privilege = null)
    {
        $role = $this->getRole();
+1 −1
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ class SaisieController extends AbstractController
        /* @var $intervenant Intervenant */
        $intervenant = $this->getEvent()->getParam('intervenant');

        $canAddMission = true;
        $canAddMission = $this->isAllowed(Privileges::getResourceId(Privileges::MISSION_EDITION));

        return compact('intervenant', 'canAddMission');
    }
Loading