diff --git a/data/sql/schema_postgresql.sql b/data/sql/schema_postgresql.sql index e0dd02247bda37c0bafceef780075b67be96ce60..cc1efca2569daf77411394210d22d804584d313d 100644 --- a/data/sql/schema_postgresql.sql +++ b/data/sql/schema_postgresql.sql @@ -1,7 +1,7 @@ -- ----------------------------------------------------- -- TABLE UNICAEN_PRIVILEGE_CATEGORIE -- ----------------------------------------------------- -CREATE TABLE UNICAEN_PRIVILEGE_CATEGORIE ( +CREATE TABLE IF NOT EXISTS UNICAEN_PRIVILEGE_CATEGORIE ( ID SERIAL PRIMARY KEY, CODE VARCHAR(150) NOT NULL, LIBELLE VARCHAR(200) NOT NULL, @@ -9,12 +9,12 @@ CREATE TABLE UNICAEN_PRIVILEGE_CATEGORIE ( ORDRE INTEGER DEFAULT 0 ); -CREATE UNIQUE INDEX UN_UNICAEN_PRIVILEGE_CATEGORIE_CODE ON UNICAEN_PRIVILEGE_CATEGORIE (CODE); +CREATE UNIQUE INDEX IF NOT EXISTS UN_UNICAEN_PRIVILEGE_CATEGORIE_CODE ON UNICAEN_PRIVILEGE_CATEGORIE (CODE); -- ----------------------------------------------------- -- TABLE UNICAEN_PRIVILEGE -- ----------------------------------------------------- -CREATE TABLE UNICAEN_PRIVILEGE_PRIVILEGE ( +CREATE TABLE IF NOT EXISTS UNICAEN_PRIVILEGE_PRIVILEGE ( ID SERIAL PRIMARY KEY, CATEGORIE_ID INTEGER NOT NULL, CODE VARCHAR(150) NOT NULL, @@ -23,14 +23,14 @@ CREATE TABLE UNICAEN_PRIVILEGE_PRIVILEGE ( CONSTRAINT FK_UNICAEN_PRIVILEGE_CATEGORIE FOREIGN KEY (CATEGORIE_ID) REFERENCES UNICAEN_PRIVILEGE_CATEGORIE (ID) DEFERRABLE INITIALLY IMMEDIATE ); -CREATE UNIQUE INDEX UN_UNICAEN_PRIVILEGE_CODE ON UNICAEN_PRIVILEGE_PRIVILEGE (CATEGORIE_ID, CODE); -CREATE INDEX IX_UNICAEN_PRIVILEGE_CATEGORIE ON UNICAEN_PRIVILEGE_PRIVILEGE(CATEGORIE_ID); +CREATE UNIQUE INDEX IF NOT EXISTS UN_UNICAEN_PRIVILEGE_CODE ON UNICAEN_PRIVILEGE_PRIVILEGE (CATEGORIE_ID, CODE); +CREATE INDEX IF NOT EXISTS IX_UNICAEN_PRIVILEGE_CATEGORIE ON UNICAEN_PRIVILEGE_PRIVILEGE(CATEGORIE_ID); -- ----------------------------------------------------- -- TABLE UNICAEN_ROLE_PRIVILEGE_LINKER -- ----------------------------------------------------- -CREATE TABLE UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER ( +CREATE TABLE IF NOT EXISTS UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER ( ROLE_ID INTEGER NOT NULL, PRIVILEGE_ID INTEGER NOT NULL, CONSTRAINT PK_UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER PRIMARY KEY (ROLE_ID, PRIVILEGE_ID), @@ -38,26 +38,27 @@ CREATE TABLE UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER ( CONSTRAINT FK_UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER_PRIVILEGE FOREIGN KEY (PRIVILEGE_ID) REFERENCES UNICAEN_PRIVILEGE_PRIVILEGE (ID) DEFERRABLE INITIALLY IMMEDIATE ); -CREATE INDEX IX_UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER_ROLE ON UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER (ROLE_ID); -CREATE INDEX IX_UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER_PRIVILEGE ON UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER (PRIVILEGE_ID); +CREATE INDEX IF NOT EXISTS IX_UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER_ROLE ON UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER (ROLE_ID); +CREATE INDEX IF NOT EXISTS IX_UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER_PRIVILEGE ON UNICAEN_PRIVILEGE_PRIVILEGE_ROLE_LINKER (PRIVILEGE_ID); -- DATA - INSERT INTO UNICAEN_PRIVILEGE_CATEGORIE ( CODE, LIBELLE, NAMESPACE, ORDRE) -values - ('utilisateur', 'Gestion des utilisateurs', 'UnicaenUtilisateur\Provider\Privilege' 1), - ('role', 'Gestion des rôles', 'UnicaenUtilisateur\Provider\Privilege', 1), - ('privilege', 'Gestion des privilèges', 'UnicaenPrivilege\Provider\Privilege', 1) + values + ('utilisateur', 'Gestion des utilisateurs', 'UnicaenUtilisateur\Provider\Privilege', 1), + ('role', 'Gestion des rôles', 'UnicaenUtilisateur\Provider\Privilege', 2), + ('privilege', 'Gestion des privilèges', 'UnicaenPrivilege\Provider\Privilege', 3) ON CONFLICT (CODE) DO -UPDATE SET - LIBELLE=excluded.LIBELLE, - NAMESPACE=excluded.NAMESPACE, - ORDRE=excluded.ORDRE; + UPDATE SET + LIBELLE=excluded.LIBELLE, + NAMESPACE=excluded.NAMESPACE, + ORDRE=excluded.ORDRE; + + WITH d(code, lib, ordre) AS ( SELECT 'utilisateur_afficher', 'Consulter un utilisateur', 1 UNION @@ -66,13 +67,13 @@ WITH d(code, lib, ordre) AS ( SELECT 'utilisateur_modifierrole', 'Modifier les rôles attribués à un utilisateur', 4 ) INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE) -SELECT cp.id, d.code, d.lib, d.ordre -FROM d - JOIN unicaen_privilege_categorie cp ON cp.CODE = 'utilisateur' + SELECT cp.id, d.code, d.lib, d.ordre + FROM d + JOIN unicaen_privilege_categorie cp ON cp.CODE = 'utilisateur' ON CONFLICT (CATEGORIE_ID, CODE) DO -UPDATE SET - LIBELLE=excluded.LIBELLE, - ORDRE=excluded.ORDRE; + UPDATE SET + LIBELLE=excluded.LIBELLE, + ORDRE=excluded.ORDRE; WITH d(code, lib, ordre) AS ( SELECT 'role_afficher', 'Consulter les rôles', 1 UNION @@ -80,13 +81,13 @@ WITH d(code, lib, ordre) AS ( SELECT 'role_effacer', 'Supprimer un rôle', 3 ) INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE) -SELECT cp.id, d.code, d.lib, d.ordre -FROM d - JOIN unicaen_privilege_categorie cp ON cp.CODE = 'role' + SELECT cp.id, d.code, d.lib, d.ordre + FROM d + JOIN unicaen_privilege_categorie cp ON cp.CODE = 'role' ON CONFLICT (CATEGORIE_ID, CODE) DO -UPDATE SET - LIBELLE=excluded.LIBELLE, - ORDRE=excluded.ORDRE; + UPDATE SET + LIBELLE=excluded.LIBELLE, + ORDRE=excluded.ORDRE; WITH d(code, lib, ordre) AS ( @@ -97,10 +98,21 @@ WITH d(code, lib, ordre) AS ( SELECT 'privilege_affecter' , 'Attribuer un privilège', 5 ) INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE) -SELECT cp.id, d.code, d.lib, d.ordre -FROM d - JOIN unicaen_privilege_categorie cp ON cp.CODE = 'privilege' + SELECT cp.id, d.code, d.lib, d.ordre + FROM d + JOIN unicaen_privilege_categorie cp ON cp.CODE = 'privilege' ON CONFLICT (CATEGORIE_ID, CODE) DO -UPDATE SET - LIBELLE=excluded.LIBELLE, - ORDRE=excluded.ORDRE; \ No newline at end of file + UPDATE SET + LIBELLE=excluded.LIBELLE, + ORDRE=excluded.ORDRE; + +INSERT INTO unicaen_privilege_privilege_role_linker + (role_id, privilege_id) + SELECT role.id, privilege.id + FROM + unicaen_utilisateur_role role, + unicaen_privilege_privilege privilege + JOIN unicaen_privilege_categorie cp ON privilege.categorie_id = cp.id + WHERE role.role_id = 'Admin_tech' + AND cp.code IN('utilisateur', 'role', 'privilege') + ON conflict do nothing; \ No newline at end of file