Skip to content

Commit

Permalink
TDB: Fixe le filtre des indicateurs par plan action
Browse files Browse the repository at this point in the history
Fixe en supprimant la vérification de droits sur les axes liés aux indicateurs, qui est déjà faite sur la vue `indicateur_definitions`.
  • Loading branch information
farnoux committed Jun 25, 2024
1 parent aea9cf6 commit 6257a03
Show file tree
Hide file tree
Showing 12 changed files with 600 additions and 445 deletions.
39 changes: 21 additions & 18 deletions data_layer/sqitch/deploy/indicateur/detail.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,27 @@ BEGIN;

create or replace view indicateur_definitions
as
select c.id as collectivite_id,
definition.id as indicateur_id,
null::integer as indicateur_perso_id,
definition.nom as nom,
definition.description,
definition.unite
from collectivite c
cross join indicateur_definition definition
where is_authenticated()
union all
select definition.collectivite_id as collectivite_id,
null::indicateur_id as indicateur_id,
definition.id as indicateur_perso_id,
definition.titre,
definition.description,
definition.unite
from indicateur_personnalise_definition definition
where can_read_acces_restreint(collectivite_id);
SELECT * FROM (
select c.id as collectivite_id,
definition.id as indicateur_id,
null::integer as indicateur_perso_id,
definition.nom as nom,
definition.description,
definition.unite
from collectivite c
cross join indicateur_definition definition
where is_authenticated()
union all
select definition.collectivite_id as collectivite_id,
null::indicateur_id as indicateur_id,
definition.id as indicateur_perso_id,
definition.titre,
definition.description,
definition.unite
from indicateur_personnalise_definition definition
) AS f
WHERE can_read_acces_restreint(f.collectivite_id);

comment on view indicateur_definitions
is 'Les définitions des indicateurs prédéfinis et personnalisés';

Expand Down
28 changes: 28 additions & 0 deletions data_layer/sqitch/deploy/indicateur/detail@v3.5.0.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-- Deploy tet:indicateur/detail to pg

BEGIN;

create or replace view indicateur_definitions
as
select c.id as collectivite_id,
definition.id as indicateur_id,
null::integer as indicateur_perso_id,
definition.nom as nom,
definition.description,
definition.unite
from collectivite c
cross join indicateur_definition definition
where is_authenticated()
union all
select definition.collectivite_id as collectivite_id,
null::indicateur_id as indicateur_id,
definition.id as indicateur_perso_id,
definition.titre,
definition.description,
definition.unite
from indicateur_personnalise_definition definition
where can_read_acces_restreint(collectivite_id);
comment on view indicateur_definitions
is 'Les définitions des indicateurs prédéfinis et personnalisés';

COMMIT;
218 changes: 4 additions & 214 deletions data_layer/sqitch/deploy/indicateur/filtre.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,9 @@

BEGIN;

create or replace function
thematiques(indicateur_definitions)
returns setof thematique
language sql
security definer
stable
begin
atomic
select t.*
from (
select thematique
from indicateur_definition definition
join thematique
on thematique.md_id = any (definition.thematiques)
where definition.id = $1.indicateur_id
union
select thematique
from indicateur_personnalise_definition definition
join indicateur_personnalise_thematique it
on definition.id = it.indicateur_id
join thematique on it.thematique_id = thematique.id
where definition.id = $1.indicateur_perso_id
) t
where can_read_acces_restreint($1.collectivite_id);
end;
comment on function thematiques(indicateur_definitions) is
'Les thématiques associées à un indicateur.';

create or replace function
definition_referentiel(indicateur_definitions)
returns setof indicateur_definition
rows 1
language sql
security definer
stable
begin
atomic
select ist
from indicateur_definition ist
where ist.id = $1.indicateur_id
and is_authenticated();
end;
comment on function definition_referentiel(indicateur_definitions) is
'La définition de l''indicateur provenant du référentiel.';

-- Recrée la même fonction sans la vérification des droits
-- qui pose des problèmes de performance lors du `fetchFilteredIndicateurs`
-- (requête +30s qui timeout sur l'app)

create or replace function
axes(indicateur_definitions)
Expand All @@ -73,178 +31,10 @@ begin
-- indicateur perso
or ($1.indicateur_perso_id is not null
and fai.indicateur_personnalise_id = $1.indicateur_perso_id))
and can_read_acces_restreint(axe.collectivite_id);
;
end;
comment on function axes(indicateur_definitions) is
'Les axes (plans d''action) associés à un indicateur.';

create or replace function
fiches_non_classees(indicateur_definitions)
returns setof fiche_action_indicateur
language sql
security definer
stable
begin
atomic
select fai
from fiche_action_indicateur fai
join fiche_action fa on fa.id = fai.fiche_id and fa.collectivite_id = $1.collectivite_id
left join definition_referentiel($1) def on true
where not exists (select from fiche_action_axe faa where faa.fiche_id = fai.fiche_id)
and (
-- indicateur prédéfini
fai.indicateur_id = $1.indicateur_id
-- indicateur perso
or fai.indicateur_personnalise_id = $1.indicateur_perso_id
-- indicateur prédéfini dont les valeurs sont celles d'un autre
or def.valeur_indicateur = $1.indicateur_id
)
and can_read_acces_restreint(fa.collectivite_id);
end;
comment on function fiches_non_classees(indicateur_definitions) is
'Les fiches non classées (sans plan d''action) associées à un indicateur.';

create or replace function
pilotes(indicateur_definitions)
returns setof indicateur_pilote
language sql
security definer
stable
begin
atomic
select ip
from indicateur_pilote ip
left join definition_referentiel($1) def on true
where
-- indicateur prédéfini
(($1.indicateur_id is not null
and ip.indicateur_id = $1.indicateur_id
and collectivite_id = $1.collectivite_id)
-- indicateur prédéfini dont les valeurs sont celles d'un autre
or ($1.indicateur_id is not null
and ip.indicateur_id = def.valeur_indicateur
and collectivite_id = $1.collectivite_id)
-- indicateur perso
or ($1.indicateur_perso_id is not null
and ip.indicateur_perso_id = $1.indicateur_perso_id))
and can_read_acces_restreint(ip.collectivite_id);
end;
comment on function pilotes(indicateur_definitions) is
'Les personnes pilotes associées à un indicateur.';

create or replace function
personne(indicateur_pilote)
returns setof personne
rows 1
language sql
security definer
stable
begin
atomic
select private.get_personne($1)
where can_read_acces_restreint($1.collectivite_id);
end;
comment on function personne(indicateur_pilote) is
'Une personne associée comme personne pilote d''un indicateur.';

create or replace function
services(indicateur_definitions)
returns setof indicateur_service_tag
language sql
security definer
stable
begin
atomic
select ist
from indicateur_service_tag ist
left join definition_referentiel($1) def on true
where
-- indicateur prédéfini
(($1.indicateur_id is not null
and ist.indicateur_id = $1.indicateur_id
and collectivite_id = $1.collectivite_id)
-- indicateur prédéfini dont les valeurs sont celles d'un autre
or ($1.indicateur_id is not null
and ist.indicateur_id = def.valeur_indicateur
and collectivite_id = $1.collectivite_id)
-- indicateur perso
or ($1.indicateur_perso_id is not null
and ist.indicateur_perso_id = $1.indicateur_perso_id))
and can_read_acces_restreint(ist.collectivite_id);
end;
comment on function services(indicateur_definitions) is
'Les services associés à un indicateur.';


create or replace function
definition_perso(indicateur_definitions)
returns setof indicateur_personnalise_definition
rows 1
language sql
security definer
stable
begin
atomic
select ipd
from indicateur_personnalise_definition ipd
where ipd.id = $1.indicateur_perso_id
and can_read_acces_restreint(ipd.collectivite_id);
end;
comment on function definition_perso(indicateur_definitions) is
'La définition de l''indicateur personnalisé.';


create or replace function
enfants(indicateur_definitions)
returns setof indicateur_definitions
language sql
security definer
stable
begin
atomic
select $1.collectivite_id as collectivite_id,
definition.id as indicateur_id,
null::integer as indicateur_perso_id,
definition.nom as nom,
definition.description,
definition.unite
from indicateur_definition definition
where definition.parent = $1.indicateur_id
and is_authenticated();
end;
comment on function enfants(indicateur_definitions) is
'Définitions des indicateurs enfants d''un indicateur composé.';

create or replace function
enfants(indicateur_definition)
returns setof indicateur_definition
language sql
security definer
stable
begin
atomic
select def
from indicateur_definition def
where def.parent = $1.id
and is_authenticated();
end;
comment on function enfants(indicateur_definition) is
'Définitions des indicateurs enfants d''un indicateur composé.';

create or replace function
indicateur_action(indicateur_definitions)
returns setof indicateur_action
language sql
security definer
stable
begin
atomic
select ia
from indicateur_action ia
where ia.indicateur_id = $1.indicateur_id
and is_authenticated();
end;
comment on function indicateur_action(indicateur_definitions) is
'La relation entre un indicateur prédéfini et des actions des référentiels.';

COMMIT;
Loading

0 comments on commit 6257a03

Please sign in to comment.