Loading doc/release-notes/9.0.0/01_divers.sql +0 −72 Changes for doc/release-notes/9.0.0/01_divers.sql: 0 added lines, 72 removed lines. Original line number Diff line number Diff line Loading @@ -55,78 +55,6 @@ alter table validite_fichier drop constraint validite_fichier_ffk; alter table validite_fichier add constraint validite_fichier_ffk foreign key (fichier_id) references fichier on delete restrict; -- -- role__create_roles_from_profils_for_structure() : -- suppression du ménage systématique des attributions de privilèges car des rôles ne sont pas liés à un profil. -- create or replace function public.role__create_roles_from_profils_for_structure(p_structure_id bigint) returns void language plpgsql as $$begin -- -- Procédure de création des rôles manquants à partir des profils structure-dépendants, -- pour la structure spécifiée. -- insert into role ( id, code, libelle, source_code, source_id, role_id, histo_createur_id, structure_id, type_structure_dependant_id ) select nextval('role_id_seq'), p.role_id, p.libelle, s.source_code || '::' || p.role_id, app_source_id(), p.libelle || ' ' || case when ts.code = 'etablissement' then s.source_code else s.code end, app_utilisateur_id(), s.id, s.type_structure_id from structure s join type_structure ts on s.type_structure_id = ts.id join profil p on p.structure_type = s.type_structure_id where s.id = p_structure_id on conflict do nothing; -- -- Création des profil_to_role manquants -- insert into profil_to_role(profil_id, role_id) select p.id, r.id from role r join profil p on p.role_id = r.code where r.structure_id = p_structure_id and not exists (select * from profil_to_role p2r where p2r.role_id = r.id) order by code; -- -- Attribution automatique des privilèges aux rôles, d'après ce qui est spécifié dans : -- - PROFIL_TO_ROLE (profils appliqués à chaque rôle) et -- - PROFIL_PRIVILEGE (privilèges accordés à chaque profil). -- insert into role_privilege (role_id, privilege_id) select p2r.role_id, pp.privilege_id from profil_to_role p2r join role r on p2r.role_id = r.id and r.structure_id = p_structure_id join profil pr on pr.id = p2r.profil_id join profil_privilege pp on pp.profil_id = pr.id where not exists ( select * from role_privilege where role_id = p2r.role_id and privilege_id = pp.privilege_id) order by pr.role_id ; -- ATTENTION : ne pas faire de suppression des 'role_privilege' en trop d'après le contenu de 'profil_to_role' et de 'profil_privilege' -- parce que des rôles ne sont associés à aucun profil (ex: "Authentifié") et ces derniers se verraient retirer tous leurs privilèges ! end $$; -- -- Admission -- Loading doc/release-notes/9.0.0/02_roles.sql +139 −9 Changes for doc/release-notes/9.0.0/02_roles.sql: 139 added lines, 9 removed lines. Original line number Diff line number Diff line Loading @@ -2,6 +2,26 @@ -- 9.0.0 -- -- -- Nouvelle colonne dans profil. -- alter table profil add these_dep boolean default false not null; comment on column profil.these_dep is 'Indique si ce profil s''adresse à un rôle thèse-dépendant '; update profil set these_dep = true where role_id in ( 'A', -- Rapporteur Absent 'D', -- Directeur de thèse 'DOCTORANT', -- Doctorant 'K', -- Co-directeur 'M', -- Membre 'P', -- Président du jury 'R' -- Rapporteur ); -- -- Profils devant être typés 'etablissement' (certains l'étaient déjà) -- Loading @@ -22,32 +42,142 @@ where role_id in ( 'R' -- Rapporteur ); -- -- Troncature préalable du structure.code nécessaire (cf. role__create_roles_from_profils_for_structure()). -- Correction de la signature de privilege__update_role_privilege(). -- update structure set code = substring(code, 1, 16) where length(code) > 16; drop function privilege__update_role_privilege; create function privilege__update_role_privilege() returns void language plpgsql as $$ BEGIN -- création des 'role_privilege' manquants d'après le contenu de 'profil_to_role' et de 'profil_privilege' insert into role_privilege (role_id, privilege_id) select p2r.role_id, pp.privilege_id from profil_to_role p2r join profil pr on pr.id = p2r.profil_id join profil_privilege pp on pp.profil_id = pr.id where not exists( select * from role_privilege where role_id = p2r.role_id and privilege_id = pp.privilege_id ); -- ATTENTION : ne pas faire de suppression des 'role_privilege' en trop d'après le contenu de 'profil_to_role' et de 'profil_privilege' -- parce que des rôles ne sont associés à aucun profil (ex: "Authentifié") et ces derniers se verraient retirer tous leurs privilèges ! END; $$; -- -- Création des rôles typés 'etablissement', en se basant sur les profils -- Vraie contrainte d'unicité dans la table role. -- drop index if exists role_code_structure_id_uindex; alter table role add constraint role_code_structure_uindex unique(code, structure_id); -- -- role__create_roles_from_profils_for_structure() : -- - suppression du ménage systématique des attributions de privilèges car des rôles ne sont pas liés à un profil -- - update du role s'il existe déjà. -- create or replace function role__create_roles_from_profils_for_structure(p_structure_id bigint) returns void language plpgsql as $$begin -- -- Procédure de création des rôles manquants à partir des profils structure-dépendants, -- pour la structure spécifiée. -- insert into role ( id, code, libelle, source_code, source_id, role_id, histo_createur_id, these_dep, structure_id, type_structure_dependant_id ) select nextval('role_id_seq'), p.role_id, p.libelle, s.source_code || '::' || p.role_id, app_source_id(), p.libelle || ' ' || case when ts.code = 'etablissement' then s.source_code else s.code end, app_utilisateur_id(), p.these_dep, s.id, s.type_structure_id from structure s join type_structure ts on s.type_structure_id = ts.id join profil p on p.structure_type = s.type_structure_id where s.id = p_structure_id on conflict on constraint role_code_structure_uindex do update set these_dep = excluded.these_dep, libelle = excluded.libelle ; -- -- Création des profil_to_role manquants -- insert into profil_to_role(profil_id, role_id) select p.id, r.id from role r join profil p on p.role_id = r.code where r.structure_id = p_structure_id and not exists (select * from profil_to_role p2r where p2r.role_id = r.id) order by code; -- -- Attribution automatique des privilèges aux rôles, d'après ce qui est spécifié dans : -- - PROFIL_TO_ROLE (profils appliqués à chaque rôle) et -- - PROFIL_PRIVILEGE (privilèges accordés à chaque profil). -- insert into role_privilege (role_id, privilege_id) select p2r.role_id, pp.privilege_id from profil_to_role p2r join role r on p2r.role_id = r.id and r.structure_id = p_structure_id join profil pr on pr.id = p2r.profil_id join profil_privilege pp on pp.profil_id = pr.id where not exists ( select * from role_privilege where role_id = p2r.role_id and privilege_id = pp.privilege_id) order by pr.role_id ; -- ATTENTION : ne pas faire de suppression des 'role_privilege' en trop d'après le contenu de 'profil_to_role' et de 'profil_privilege' -- parce que des rôles ne sont associés à aucun profil (ex: "Authentifié") et ces derniers se verraient retirer tous leurs privilèges ! end $$; -- -- Création/màj des rôles typés 'structure', en se basant sur les profils -- -- Troncature préalable du structure.code nécessaire (cf. role__create_roles_from_profils_for_structure()). update structure set code = substring(code, 1, 16) where length(code) > 16; -- Création/màj des rôles typés 'etablissement' pour chaque établissement d'inscription select e.id etablissement_id, e.structure_id, role__create_roles_from_profils_for_structure(s.id) from etablissement e join structure s on e.structure_id = s.id and s.histo_destruction is null join type_structure ts on s.type_structure_id = ts.id and ts.code = 'etablissement' where e.histo_destruction is null and e.est_etab_inscription = true; -- -- Création des rôles typés 'ecole-doctorale', en se basant sur les profils -- -- Création/màj des rôles typés 'ecole-doctorale' pour chaque ED select e.id ecole_doct_id, e.structure_id, role__create_roles_from_profils_for_structure(s.id) from ecole_doct e join structure s on e.structure_id = s.id and s.histo_destruction is null join type_structure ts on s.type_structure_id = ts.id and ts.code = 'ecole-doctorale' where e.histo_destruction is null; -- -- Création des rôles typés 'ecole-doctorale', en se basant sur les profils -- -- Création/màj des rôles typés 'ecole-doctorale' pour chaque UR select e.id unite_rech_id, e.structure_id, role__create_roles_from_profils_for_structure(s.id) from unite_rech e join structure s on e.structure_id = s.id and s.histo_destruction is null Loading Loading
doc/release-notes/9.0.0/01_divers.sql +0 −72 Changes for doc/release-notes/9.0.0/01_divers.sql: 0 added lines, 72 removed lines. Original line number Diff line number Diff line Loading @@ -55,78 +55,6 @@ alter table validite_fichier drop constraint validite_fichier_ffk; alter table validite_fichier add constraint validite_fichier_ffk foreign key (fichier_id) references fichier on delete restrict; -- -- role__create_roles_from_profils_for_structure() : -- suppression du ménage systématique des attributions de privilèges car des rôles ne sont pas liés à un profil. -- create or replace function public.role__create_roles_from_profils_for_structure(p_structure_id bigint) returns void language plpgsql as $$begin -- -- Procédure de création des rôles manquants à partir des profils structure-dépendants, -- pour la structure spécifiée. -- insert into role ( id, code, libelle, source_code, source_id, role_id, histo_createur_id, structure_id, type_structure_dependant_id ) select nextval('role_id_seq'), p.role_id, p.libelle, s.source_code || '::' || p.role_id, app_source_id(), p.libelle || ' ' || case when ts.code = 'etablissement' then s.source_code else s.code end, app_utilisateur_id(), s.id, s.type_structure_id from structure s join type_structure ts on s.type_structure_id = ts.id join profil p on p.structure_type = s.type_structure_id where s.id = p_structure_id on conflict do nothing; -- -- Création des profil_to_role manquants -- insert into profil_to_role(profil_id, role_id) select p.id, r.id from role r join profil p on p.role_id = r.code where r.structure_id = p_structure_id and not exists (select * from profil_to_role p2r where p2r.role_id = r.id) order by code; -- -- Attribution automatique des privilèges aux rôles, d'après ce qui est spécifié dans : -- - PROFIL_TO_ROLE (profils appliqués à chaque rôle) et -- - PROFIL_PRIVILEGE (privilèges accordés à chaque profil). -- insert into role_privilege (role_id, privilege_id) select p2r.role_id, pp.privilege_id from profil_to_role p2r join role r on p2r.role_id = r.id and r.structure_id = p_structure_id join profil pr on pr.id = p2r.profil_id join profil_privilege pp on pp.profil_id = pr.id where not exists ( select * from role_privilege where role_id = p2r.role_id and privilege_id = pp.privilege_id) order by pr.role_id ; -- ATTENTION : ne pas faire de suppression des 'role_privilege' en trop d'après le contenu de 'profil_to_role' et de 'profil_privilege' -- parce que des rôles ne sont associés à aucun profil (ex: "Authentifié") et ces derniers se verraient retirer tous leurs privilèges ! end $$; -- -- Admission -- Loading
doc/release-notes/9.0.0/02_roles.sql +139 −9 Changes for doc/release-notes/9.0.0/02_roles.sql: 139 added lines, 9 removed lines. Original line number Diff line number Diff line Loading @@ -2,6 +2,26 @@ -- 9.0.0 -- -- -- Nouvelle colonne dans profil. -- alter table profil add these_dep boolean default false not null; comment on column profil.these_dep is 'Indique si ce profil s''adresse à un rôle thèse-dépendant '; update profil set these_dep = true where role_id in ( 'A', -- Rapporteur Absent 'D', -- Directeur de thèse 'DOCTORANT', -- Doctorant 'K', -- Co-directeur 'M', -- Membre 'P', -- Président du jury 'R' -- Rapporteur ); -- -- Profils devant être typés 'etablissement' (certains l'étaient déjà) -- Loading @@ -22,32 +42,142 @@ where role_id in ( 'R' -- Rapporteur ); -- -- Troncature préalable du structure.code nécessaire (cf. role__create_roles_from_profils_for_structure()). -- Correction de la signature de privilege__update_role_privilege(). -- update structure set code = substring(code, 1, 16) where length(code) > 16; drop function privilege__update_role_privilege; create function privilege__update_role_privilege() returns void language plpgsql as $$ BEGIN -- création des 'role_privilege' manquants d'après le contenu de 'profil_to_role' et de 'profil_privilege' insert into role_privilege (role_id, privilege_id) select p2r.role_id, pp.privilege_id from profil_to_role p2r join profil pr on pr.id = p2r.profil_id join profil_privilege pp on pp.profil_id = pr.id where not exists( select * from role_privilege where role_id = p2r.role_id and privilege_id = pp.privilege_id ); -- ATTENTION : ne pas faire de suppression des 'role_privilege' en trop d'après le contenu de 'profil_to_role' et de 'profil_privilege' -- parce que des rôles ne sont associés à aucun profil (ex: "Authentifié") et ces derniers se verraient retirer tous leurs privilèges ! END; $$; -- -- Création des rôles typés 'etablissement', en se basant sur les profils -- Vraie contrainte d'unicité dans la table role. -- drop index if exists role_code_structure_id_uindex; alter table role add constraint role_code_structure_uindex unique(code, structure_id); -- -- role__create_roles_from_profils_for_structure() : -- - suppression du ménage systématique des attributions de privilèges car des rôles ne sont pas liés à un profil -- - update du role s'il existe déjà. -- create or replace function role__create_roles_from_profils_for_structure(p_structure_id bigint) returns void language plpgsql as $$begin -- -- Procédure de création des rôles manquants à partir des profils structure-dépendants, -- pour la structure spécifiée. -- insert into role ( id, code, libelle, source_code, source_id, role_id, histo_createur_id, these_dep, structure_id, type_structure_dependant_id ) select nextval('role_id_seq'), p.role_id, p.libelle, s.source_code || '::' || p.role_id, app_source_id(), p.libelle || ' ' || case when ts.code = 'etablissement' then s.source_code else s.code end, app_utilisateur_id(), p.these_dep, s.id, s.type_structure_id from structure s join type_structure ts on s.type_structure_id = ts.id join profil p on p.structure_type = s.type_structure_id where s.id = p_structure_id on conflict on constraint role_code_structure_uindex do update set these_dep = excluded.these_dep, libelle = excluded.libelle ; -- -- Création des profil_to_role manquants -- insert into profil_to_role(profil_id, role_id) select p.id, r.id from role r join profil p on p.role_id = r.code where r.structure_id = p_structure_id and not exists (select * from profil_to_role p2r where p2r.role_id = r.id) order by code; -- -- Attribution automatique des privilèges aux rôles, d'après ce qui est spécifié dans : -- - PROFIL_TO_ROLE (profils appliqués à chaque rôle) et -- - PROFIL_PRIVILEGE (privilèges accordés à chaque profil). -- insert into role_privilege (role_id, privilege_id) select p2r.role_id, pp.privilege_id from profil_to_role p2r join role r on p2r.role_id = r.id and r.structure_id = p_structure_id join profil pr on pr.id = p2r.profil_id join profil_privilege pp on pp.profil_id = pr.id where not exists ( select * from role_privilege where role_id = p2r.role_id and privilege_id = pp.privilege_id) order by pr.role_id ; -- ATTENTION : ne pas faire de suppression des 'role_privilege' en trop d'après le contenu de 'profil_to_role' et de 'profil_privilege' -- parce que des rôles ne sont associés à aucun profil (ex: "Authentifié") et ces derniers se verraient retirer tous leurs privilèges ! end $$; -- -- Création/màj des rôles typés 'structure', en se basant sur les profils -- -- Troncature préalable du structure.code nécessaire (cf. role__create_roles_from_profils_for_structure()). update structure set code = substring(code, 1, 16) where length(code) > 16; -- Création/màj des rôles typés 'etablissement' pour chaque établissement d'inscription select e.id etablissement_id, e.structure_id, role__create_roles_from_profils_for_structure(s.id) from etablissement e join structure s on e.structure_id = s.id and s.histo_destruction is null join type_structure ts on s.type_structure_id = ts.id and ts.code = 'etablissement' where e.histo_destruction is null and e.est_etab_inscription = true; -- -- Création des rôles typés 'ecole-doctorale', en se basant sur les profils -- -- Création/màj des rôles typés 'ecole-doctorale' pour chaque ED select e.id ecole_doct_id, e.structure_id, role__create_roles_from_profils_for_structure(s.id) from ecole_doct e join structure s on e.structure_id = s.id and s.histo_destruction is null join type_structure ts on s.type_structure_id = ts.id and ts.code = 'ecole-doctorale' where e.histo_destruction is null; -- -- Création des rôles typés 'ecole-doctorale', en se basant sur les profils -- -- Création/màj des rôles typés 'ecole-doctorale' pour chaque UR select e.id unite_rech_id, e.structure_id, role__create_roles_from_profils_for_structure(s.id) from unite_rech e join structure s on e.structure_id = s.id and s.histo_destruction is null Loading