Commit 8ca52f93 authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

Gestion des privileges + assertion

parent 00bfa936
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -13,8 +13,11 @@

    <!--On affiche une synthèse de la liste des offres-->
    <div v-if="extended">
        <offreEmploi v-for="offre in offres" :key="offre.id" :offre="offre" @refresh="refresh"
        <offreEmploi v-for="offre in offres" :key="offre.id" :offre="offre" @refresh="refresh" @supprimer="supprimer"
                     :canPostuler="this.canPostuler"
                     :canModifier="this.canModifier"
                     :canValider="this.canValider"
                     :canSupprimer="this.canSupprimer"
                     :canVoirCandidature="this.canVoirCandidature"
                     :canValiderCandidature="this.canValiderCandidature"
                     :extended="extended"
+39 −45
Original line number Diff line number Diff line
<template>

    <div class="col" v-if="!this.extended">
        <div class="card h-100">
            <div class="card-header">
@@ -31,22 +32,7 @@
            </div>
            <div class="card-footer">
                <div class="d-grid gap-2 d-md-flex justify-content-md-end">
                    <a v-if="offre.validation && this.canValider"
                       :href="devaliderUrl"
                       class="btn btn-danger"
                       title="Devalider"
                       @click.prevent="devalider">
                        <u-icon name="thumbs-down"/>
                        Devalider
                    </a>
                    <a v-if="!offre.validation && this.canValider"
                       :href="validerUrl"
                       class="btn btn-success"
                       title="Valider"
                       @click.prevent="valider">
                        <u-icon name="thumbs-up"/>
                        Valider
                    </a>

                    <a :href="consulterUrl"
                       title="Consulter "
                       class="btn btn-primary"
@@ -54,29 +40,12 @@
                        <u-icon name="eye"/>
                        Voir
                    </a>
                    <a v-if="this.canModifier"
                       :href="saisirUrl"
                       class="btn btn-primary"
                       @click.prevent="saisir"
                       title="Modifier">
                        <u-icon name="pen-to-square"/>
                        Modifier
                    </a>
                    <a v-if="this.canSupprimer"
                       :href="supprimerUrl"
                       class="btn btn-danger"
                       title="Supprimer"
                       data-title="Suppression de l'offre"
                       data-content="Êtes-vous sur de vouloir supprimer l'offre ?"
                       @click.prevent="supprimer">
                        <u-icon name="trash"/>
                    </a>

                </div>
            </div>
        </div>
    </div>
    <div v-if="this.extended">
        <h1 class="page-header">{{ offre.titre }}</h1>
        <div v-if="!this.utilisateur" class="alert alert-primary d-flex align-items-center" role="alert">
            <i class="fa-solid fa-user"></i>
            <div class="ms-2">
@@ -174,8 +143,42 @@

        <div class="mt-5">
            <a class="btn btn-primary" href="/offre-emploi">Retour aux offres</a>&nbsp;
            <a :class="isDisabled" :href="'/offre-emploi/postuler/' + offre.id" data-bs-toggle="tooltip" data-bs-placement="top"
               data-bs-original-title="Vous devez être connecté pour postuler">Postuler</a>
            <a v-if="this.canPostuler" :href="'/offre-emploi/postuler/' + offre.id" data-bs-toggle="tooltip" data-bs-placement="top"
               data-bs-original-title="Vous devez être connecté pour postuler">Postuler</a>&nbsp;
            <a v-if="offre.canModifier"
               :href="saisirUrl"
               class="btn btn-primary"
               @click.prevent="saisir"
               title="Modifier">
                <u-icon name="pen-to-square"/>
                Modifier
            </a>&nbsp;
            <a v-if="offre.validation && offre.canValider"
               :href="devaliderUrl"
               class="btn btn-danger"
               title="Devalider"
               @click.prevent="devalider">
                <u-icon name="thumbs-down"/>
                Devalider
            </a>&nbsp;
            <a v-if="!offre.validation && offre.canValider"
               :href="validerUrl"
               class="btn btn-success"
               title="Valider"
               @click.prevent="valider">
                <u-icon name="thumbs-up"/>
                Valider
            </a>&nbsp;
            <a v-if="offre.canSupprimer"
               :href="supprimerUrl"
               class="btn btn-danger"
               title="Supprimer"
               data-title="Suppression de l'offre"
               data-content="Êtes-vous sur de vouloir supprimer l'offre ?"
               @click.prevent="supprimer">
                <u-icon name="trash"/>
                Supprimer
            </a>


        </div>
@@ -202,8 +205,6 @@ export default {
    data()
    {

        console.log(this)

        return {
            saisirUrl: unicaenVue.url('offre-emploi/saisir/:offre', {offre: this.offre.id}),
            supprimerUrl: unicaenVue.url("offre-emploi/supprimer/:offre", {offre: this.offre.id}),
@@ -214,13 +215,6 @@ export default {
        };
    },
    computed: {
        isDisabled: function () {

            if (!this.canPostuler) {
                return 'btn btn-primary disabled';
            }
            return 'btn btn-primary';
        },
        isCandidat: function () {
            return false;
        },
+2 −0
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ return [

    ],


    'rules' => [
        [
            'privileges' => [
@@ -128,6 +129,7 @@ return [
                Privileges::MISSION_OFFRE_EMPLOI_POSTULER,
                Privileges::MISSION_CANDIDATURE_VISUALISATION,
                Privileges::MISSION_CANDIDATURE_VALIDER,
                Privileges::MISSION_OFFRE_EMPLOI_SUPPRESSION,

            ],
            'resources'  => 'OffreEmploi',
+17 −4
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ class OffreEmploiAssertion extends AbstractAssertion
        /** @var Role $role */
        $role = $this->getRole();


        if ($privilege && !$role->hasPrivilege($privilege)) return false;

        switch (true) {
@@ -44,6 +43,8 @@ class OffreEmploiAssertion extends AbstractAssertion
                        return $this->assertCandidatureVisualisation($role, $entity);
                    case Privileges::MISSION_CANDIDATURE_VALIDER:
                        return $this->assertCandidatureValider($role, $entity);
                    case Privileges::MISSION_OFFRE_EMPLOI_SUPPRESSION:
                        return $this->assertOffreEmploiSupprimer($role, $entity);
                }
            break;
        }
@@ -55,23 +56,34 @@ class OffreEmploiAssertion extends AbstractAssertion

    protected function assertOffreEmploiVisualisation(Role $role, OffreEmploi $offre)
    {

        if ($offre->isValide()) {
            return true;
        }

        return true;
    }



    protected function assertOffreEmploiEdition(Role $role, OffreEmploi $offre)
    {
        $haveRole = $this->haveRole();

        return $this->asserts([
            $this->haveRole(),
            $offre->canSaisie(),
            $offre->haveCandidats(),
            $this->assertOffreEmploi($role, $offre),
        ]);
    }

        $have = $offre->haveCandidats();


    protected function assertOffreEmploiSupprimer(Role $role, OffreEmploi $offre)
    {
        return $this->asserts([
            $this->haveRole(),
            $offre->canSaisie(),
            !$offre->haveCandidats(),
            $this->assertOffreEmploi($role, $offre),
        ]);
    }
@@ -107,6 +119,7 @@ class OffreEmploiAssertion extends AbstractAssertion

    protected function assertOffreEmploiValidation(Role $role, OffreEmploi $offre)
    {

        return $this->asserts([
            $this->haveRole(),
            $this->assertOffreEmploi($role, $offre),
+5 −1
Original line number Diff line number Diff line
@@ -86,11 +86,14 @@ class OffreEmploiController extends AbstractController
     */
    public function listeAction()
    {
        $parameters = [];
        $role       = $this->getServiceContext()->getSelectedIdentityRole();

        /**
         * @var Query $query
         */
        $query = $this->getServiceOffreEmploi()->query([]);
        $query = $this->getServiceOffreEmploi()->query([], $role);


        $properties = [
            'id',
@@ -107,6 +110,7 @@ class OffreEmploiController extends AbstractController
            'validation',
            'candidats',
            'candidaturesValides',
            'valide',
            ['candidatures', ['id', ['intervenant', ['id', 'nomUsuel', 'prenom', 'emailPro', 'code', ['structure', ['libelleLong', 'libelleCourt', 'code', 'id']], ['statut', ['libelle', 'code']]]], 'histoCreation', 'validation']],
        ];

Loading