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

Restriction de l'afficahge des indicateurs via des rôles

parent fa79569d
Loading
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
# Version 6.3.0 01/04/2025

* Possibilité de restreindre l'affichage des indicateurs en fonction de rôles


/!\ la colonne `roles_autorises` dans la table `unicaen_indicateur_indicateur` a évolué /!\
```sql
alter table unicaen_indicateur_indicateur add roles_autorises varchar(2048) default 'Tous les rôles' not null;
```

/!\ Nouveau privilèges pour l'affichage "forcé" des indicateurs
```sql
INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
WITH d(code, lib, ordre) AS (
    SELECT 'afficher_indicateur_tous', 'Afficher tous les indicateurs', 15   UNION
)
SELECT cp.id, d.code, d.lib, d.ordre
FROM d
JOIN unicaen_privilege_categorie cp ON cp.CODE = 'indicateur';
```

# Version 6.2.1 21/01/2025

* Déclaration des périmètres en configuration
+2 −1
Original line number Diff line number Diff line
@@ -30,7 +30,8 @@ create table unicaen_indicateur_indicateur
    categorie_id             integer
        constraint uii_unicaen_indicateur_categorie_id_fk
            references unicaen_indicateur_categorie,
    perimetre                varchar(256)
    perimetre                varchar(256),
    roles_autorises          varchar(2048)
);
create unique index indicateur_id_uindex
    on unicaen_indicateur_indicateur (id);
+5 −4
Original line number Diff line number Diff line
@@ -2,10 +2,11 @@ INSERT INTO unicaen_privilege_categorie (code, libelle, ordre, namespace)
    VALUES ('indicateur', 'Gestions des indicateurs', 800, 'UnicaenIndicateur\Provider\Privilege');
INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
WITH d(code, lib, ordre) AS (
    SELECT 'afficher_indicateur', 'Afficher un indicateur', 1   UNION
    SELECT 'editer_indicateur', 'Éditer un indicateur', 2   UNION
    SELECT 'detruire_indicateur', 'Effacer un indicateur', 3 UNION
    SELECT 'indicateur_index', 'Accéder à l''index', 10 UNION
    SELECT 'afficher_indicateur', 'Afficher un indicateur', 10   UNION
    SELECT 'afficher_indicateur_tous', 'Afficher tous les indicateurs', 15   UNION
    SELECT 'editer_indicateur', 'Éditer un indicateur', 20   UNION
    SELECT 'detruire_indicateur', 'Effacer un indicateur', 30 UNION
    SELECT 'indicateur_index', 'Accéder à l''index', 1 UNION
    SELECT 'indicateur_mes_indicateurs', 'Affichage du menu - Mes Indicateurs -', 100
)
SELECT cp.id, d.code, d.lib, d.ordre
+1 −0
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ class IndicateurController extends AbstractActionController {
            'indicateursByCategorie' => $indicateursByCategorie,
            'indicateurs' => $indicateurs,
            'abonnements' => $array,
            'role' => $this->getUserService()->getConnectedRole(),
        ]);
    }

+24 −0
Original line number Diff line number Diff line
@@ -5,6 +5,9 @@ namespace UnicaenIndicateur\Entity\Db;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use UnicaenIndicateur\Service\Perimetre\PerimetreServiceInterface;
use UnicaenParametre\Service\Parametre\ParametreService;
use UnicaenUtilisateur\Entity\Db\RoleInterface;

class Indicateur {

@@ -29,6 +32,9 @@ class Indicateur {
    private ?int $nbElements = null;

    private ?string $perimetre = null;
    private ?string $rolesAutorises = null;

    const TOUS_LES_ROLES = "Tous les rôles";

    public function __construct()
    {
@@ -153,6 +159,24 @@ class Indicateur {
        $this->perimetre = $perimetre;
    }

    /** @return string[] */
    public function getRolesAutorises(): array
    {
        if ($this->rolesAutorises === null) return [Indicateur::TOUS_LES_ROLES];
        return explode(PerimetreServiceInterface::PERIMETRE_SEPARATOR, $this->rolesAutorises);
    }

    public function setRolesAutorises(?string $rolesAutorises): void
    {
        $this->rolesAutorises = $rolesAutorises;
    }

    public function isAutorise(?RoleInterface $role): bool
    {
        $listing = $this->getRolesAutorises();
        if (in_array(self::TOUS_LES_ROLES, $listing)) return true;
        return in_array($role->getRoleId(), $listing);
    }

    /** Abonnements **************************************************************** */

Loading