Commit 0c5a022f authored by David Surville's avatar David Surville
Browse files

Merge branch 'release/8.0-perimetres' of...

Merge branch 'release/8.0-perimetres' of https://git.unicaen.fr/lib/unicaen/privilege into release/8.0-perimetres
parents 5363cd8c e6a4641c
Loading
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -38,14 +38,12 @@ Une assertion est une vérification spécifique et contextuelle qui permet de co

Un périmètre définit les conditions dans lesquelles un utilisateur va avoir accès à une ressource ou va pouvoir exercer une action. Il permet d'ajouter une couche de contrôle supplémentaire au niveau des droits.


## Pré-requis

L'utilisation de ce module nécessite l'installation des modules :
* unicaen/authentification 
* unicaen/utilisateur 


## Installation

```bash
@@ -54,15 +52,14 @@ $ composer require unicaen/privilege

Il faut activer le module **UnicaenPrivilege** dans le fichier de config `config/application.config.php`


## Migration vers les périmètres
## Migration v8.0

Il est nécessaire de modifier la base de données et d'utiliser les scripts de migration disponibles :
* [PostgreSQL](./sql/migration_perimetre_postgresql.sql)
* [Oracle](./sql/migration_perimetre_oracle.sql)
* [PostgreSQL](./sql/migration_v8.0_postgresql.sql)
* [Oracle](./sql/migration_v8.0_oracle.sql)

> [!IMPORTANT]
> Certains noms de séquence sont à compléter et il est nécessaire de bien vérifier les noms des tables avant d'utiliser le script de migration. 
> Il est nécessaire de bien vérifier les noms des tables et des séquences avant d'utiliser le script de migration. 

## Utilisation du module

+24 −75
Original line number Diff line number Diff line
-- -----------------------------------------------------
-- Table unicaen_utilisateur_role
-- -----------------------------------------------------
RENAME <seq_name> TO unicaen_utilisateur_role_id_seq;


-- -----------------------------------------------------
-- Table unicaen_utilisateur_user
-- -----------------------------------------------------
RENAME <seq_name> TO unicaen_utilisateur_user_id_seq;


-- -----------------------------------------------------
-- Table unicaen_utilisateur_user_role_linker
-- -----------------------------------------------------
CREATE SEQUENCE unicaen_utilisateur_user_role_linker_id_seq NOCYCLE START WITH 1 INCREMENT BY 1 MINVALUE 0;

CREATE TABLE unicaen_utilisateur_user_role_linker (
  id        NUMBER(*,0) NOT NULL,
  user_id   NUMBER(*,0) NOT NULL,
  role_id   NUMBER(*,0) NOT NULL
);

INSERT INTO unicaen_utilisateur_user_role_linker (
  id,
  user_id,
  role_id
)
WITH tmp AS (
  SELECT * FROM unicaen_utilisateur_role_linker
)
SELECT
  unicaen_utilisateur_user_role_linker_id_seq.nextval,
  tmp.user_id,
  tmp.role_id
FROM tmp;

DROP TABLE unicaen_utilisateur_role_linker;
ALTER TABLE unicaen_utilisateur_user_role_linker ADD CONSTRAINT pk_unicaen_user_role_linker PRIMARY KEY (id);
ALTER TABLE unicaen_utilisateur_user_role_linker ADD CONSTRAINT un_unicaen_user_role_linker UNIQUE (user_id, role_id);
ALTER TABLE unicaen_utilisateur_user_role_linker ADD CONSTRAINT fk_unicaen_user_role_linker_user FOREIGN KEY (user_id) REFERENCES unicaen_utilisateur_user (id) DEFERRABLE INITIALLY IMMEDIATE;
ALTER TABLE unicaen_utilisateur_user_role_linker ADD CONSTRAINT fk_unicaen_user_role_linker_role FOREIGN KEY (role_id) REFERENCES unicaen_utilisateur_role (id) DEFERRABLE INITIALLY IMMEDIATE;
CREATE INDEX ix_unicaen_user_role_linker_user ON unicaen_utilisateur_user_role_linker (user_id);
CREATE INDEX ix_unicaen_user_role_linker_role ON unicaen_utilisateur_user_role_linker (role_id);


-- -----------------------------------------------------
-- TABLE unicaen_privilege_privilege_categorie
-- -----------------------------------------------------
RENAME <seq_name> TO unicaen_privilege_privilege_categorie_id_seq;
/*
 Renommage des séquences unicaen_privilege_categorie_id_seq et unicaen_privilege_id_seq
 */
RENAME unicaen_privilege_categorie_id_seq TO unicaen_privilege_privilege_categorie_id_seq;
RENAME unicaen_privilege_id_seq TO unicaen_privilege_privilege_id_seq;

/*
 Renommage de la table unicaen_privilege_categorie
 */
RENAME unicaen_privilege_categorie TO unicaen_privilege_privilege_categorie;


-- -----------------------------------------------------
-- TABLE unicaen_privilege_privilege
-- -----------------------------------------------------
RENAME <seq_name> TO unicaen_privilege_privilege_id_seq;


-- -----------------------------------------------------
-- Table unicaen_privilege_perimetre_categorie
-- -----------------------------------------------------
/*
 Création de la table unicaen_privilege_perimetre_categorie
 */
CREATE SEQUENCE unicaen_privilege_perimetre_categorie_id_seq NOCYCLE START WITH 1 INCREMENT BY 1 MINVALUE 0;

CREATE TABLE unicaen_privilege_perimetre_categorie (
@@ -72,10 +24,9 @@ CREATE TABLE unicaen_privilege_perimetre_categorie (
  CONSTRAINT un_unicaen_perimetre_categorie_code UNIQUE (code)
);


-- -----------------------------------------------------
-- Table unicaen_privilege_perimetre
-- -----------------------------------------------------
/*
 Création de la table unicaen_privilege_perimetre
 */
CREATE SEQUENCE unicaen_privilege_perimetre_id_seq NOCYCLE START WITH 1 INCREMENT BY 1 MINVALUE 0;

CREATE TABLE unicaen_privilege_perimetre (
@@ -92,10 +43,9 @@ CREATE TABLE unicaen_privilege_perimetre (

CREATE INDEX ix_unicaen_perimetre_categorie ON unicaen_privilege_perimetre (categorie_id);


-- -----------------------------------------------------
-- Table unicaen_privilege_perimetre_categorie_role_linker
-- -----------------------------------------------------
/*
 Création de la table unicaen_privilege_perimetre_categorie_role_linker
 */
CREATE TABLE unicaen_privilege_perimetre_categorie_role_linker (
  perimetre_categorie_id  NUMBER(*, 0) NOT NULL,
  role_id                 NUMBER(*, 0) NOT NULL,
@@ -107,10 +57,9 @@ CREATE TABLE unicaen_privilege_perimetre_categorie_role_linker (
CREATE INDEX ix_unicaen_perimetre_categorie_role_linker_perimetre_categ ON unicaen_privilege_perimetre_categorie_role_linker (perimetre_categorie_id);
CREATE INDEX ix_unicaen_perimetre_categorie_role_linker_role ON unicaen_privilege_perimetre_categorie_role_linker (role_id);


-- -----------------------------------------------------
-- Table unicaen_privilege_perimetre_user_role_linker
-- -----------------------------------------------------
/*
 Création de la table unicaen_privilege_perimetre_user_role_linker
 */
CREATE SEQUENCE unicaen_privilege_perimetre_user_role_linker_id_seq NOCYCLE START WITH 1 INCREMENT BY 1 MINVALUE 0;

CREATE TABLE unicaen_privilege_perimetre_user_role_linker (
@@ -126,9 +75,9 @@ CREATE TABLE unicaen_privilege_perimetre_user_role_linker (
CREATE INDEX ix_unicaen_perimetre_user_role_linker_perimetre ON unicaen_privilege_perimetre_user_role_linker (perimetre_id);
CREATE INDEX ix_unicaen_perimetre_user_role_linker_user_role ON unicaen_privilege_perimetre_user_role_linker (user_role_id);


-- DATA

/*
 Création des privilèges liés aux périmètres
 */
INSERT INTO utilisateur_privilege_categorie (id, code, libelle, namespace, ordre)
WITH tmp AS (
  SELECT  1, 'perimetre'  c, 'Gestion des périmètres' l, 'UnicaenPrivilege\Provider\Privilege'  n, 4  o FROM dual
+24 −64
Original line number Diff line number Diff line
-- -----------------------------------------------------
-- Table unicaen_utilisateur_role
-- -----------------------------------------------------
ALTER SEQUENCE <seq_name> RENAME TO unicaen_utilisateur_role_id_seq;


-- -----------------------------------------------------
-- Table unicaen_utilisateur_user
-- -----------------------------------------------------
ALTER SEQUENCE <seq_name> RENAME TO unicaen_utilisateur_user_id_seq;


-- -----------------------------------------------------
-- Table unicaen_utilisateur_user_role_linker
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS unicaen_utilisateur_user_role_linker (
  id               SERIAL  PRIMARY KEY,
  user_id          INTEGER NOT NULL,
  role_id          INTEGER NOT NULL
);

WITH url(u, r) AS (
  SELECT * FROM unicaen_utilisateur_role_linker
)
INSERT INTO unicaen_utilisateur_user_role_linker (user_id, role_id)
SELECT url.u, url.r FROM url;

DROP TABLE unicaen_utilisateur_role_linker;
ALTER TABLE unicaen_utilisateur_user_role_linker ADD CONSTRAINT fk_unicaen_user_role_linker_user FOREIGN KEY (user_id) REFERENCES unicaen_utilisateur_user (id) DEFERRABLE INITIALLY IMMEDIATE;
ALTER TABLE unicaen_utilisateur_user_role_linker ADD CONSTRAINT fk_unicaen_user_role_linker_role FOREIGN KEY (role_id) REFERENCES unicaen_utilisateur_role (id) DEFERRABLE INITIALLY IMMEDIATE;
CREATE UNIQUE INDEX un_unicaen_user_role_linker ON unicaen_utilisateur_user_role_linker(user_id, role_id);
CREATE INDEX ix_unicaen_user_role_linker_user ON unicaen_utilisateur_user_role_linker (user_id);
CREATE INDEX ix_unicaen_user_role_linker_role ON unicaen_utilisateur_user_role_linker (role_id);


-- -----------------------------------------------------
-- Table unicaen_privilege_privilege_categorie
-- -----------------------------------------------------
ALTER SEQUENCE <seq_name> RENAME TO unicaen_privilege_privilege_categorie_id_seq;
/*
 Renommage des séquences unicaen_privilege_categorie_id_seq et unicaen_privilege_id_seq
 */
ALTER SEQUENCE unicaen_privilege_categorie_id_seq RENAME TO unicaen_privilege_privilege_categorie_id_seq;
ALTER SEQUENCE unicaen_privilege_id_seq RENAME TO unicaen_privilege_privilege_id_seq;

/*
 Renommage de la table unicaen_privilege_categorie
 */
ALTER TABLE unicaen_privilege_categorie RENAME TO unicaen_privilege_privilege_categorie;


-- -----------------------------------------------------
-- Table unicaen_privilege_privilege
-- -----------------------------------------------------
ALTER SEQUENCE <seq_name> RENAME TO unicaen_privilege_privilege_id_seq;


-- -----------------------------------------------------
-- Table unicaen_privilege_perimetre_categorie
-- -----------------------------------------------------
/*
 Création de la table unicaen_privilege_perimetre_categorie
 */
CREATE TABLE IF NOT EXISTS unicaen_privilege_perimetre_categorie (
  id          SERIAL        PRIMARY KEY,
  code        VARCHAR(150)  NOT NULL,
@@ -59,10 +22,9 @@ CREATE TABLE IF NOT EXISTS unicaen_privilege_perimetre_categorie (

CREATE UNIQUE INDEX un_unicaen_perimetre_categorie_code ON unicaen_privilege_perimetre_categorie (code);


-- -----------------------------------------------------
-- Table unicaen_privilege_perimetre
-- -----------------------------------------------------
/*
 Création de la table unicaen_privilege_perimetre
 */
CREATE TABLE IF NOT EXISTS unicaen_privilege_perimetre (
  id            SERIAL        PRIMARY KEY,
  categorie_id  INTEGER       NOT NULL,
@@ -76,10 +38,9 @@ CREATE TABLE IF NOT EXISTS unicaen_privilege_perimetre (
CREATE UNIQUE INDEX un_unicaen_perimetre_code ON unicaen_privilege_perimetre(categorie_id, code);
CREATE INDEX ix_unicaen_perimetre_categorie ON unicaen_privilege_perimetre(categorie_id);


-- -----------------------------------------------------
-- Table unicaen_privilege_perimetre_categorie_role_linker
-- -----------------------------------------------------
/*
 Création de la table unicaen_privilege_perimetre_categorie_role_linker
 */
CREATE TABLE IF NOT EXISTS unicaen_privilege_perimetre_categorie_role_linker (
  perimetre_categorie_id  INTEGER NOT NULL,
  role_id                 INTEGER NOT NULL,
@@ -91,10 +52,9 @@ CREATE TABLE IF NOT EXISTS unicaen_privilege_perimetre_categorie_role_linker (
CREATE INDEX ix_unicaen_perimetre_categorie_role_linker_perimetre_categ ON unicaen_privilege_perimetre_categorie_role_linker (perimetre_categorie_id);
CREATE INDEX ix_unicaen_perimetre_categorie_role_linker_role ON unicaen_privilege_perimetre_categorie_role_linker (role_id);


-- -----------------------------------------------------
-- Table unicaen_privilege_perimetre_user_role_linker
-- -----------------------------------------------------
/*
 Création de la table unicaen_privilege_perimetre_user_role_linker
 */
CREATE TABLE IF NOT EXISTS unicaen_privilege_perimetre_user_role_linker (
  id              SERIAL  PRIMARY KEY,
  perimetre_id    INTEGER NOT NULL,
@@ -107,9 +67,9 @@ CREATE UNIQUE INDEX un_unicaen_perimetre_user_role_linker ON unicaen_privilege_p
CREATE INDEX ix_unicaen_perimetre_user_role_linker_perimetre ON unicaen_privilege_perimetre_user_role_linker (perimetre_id);
CREATE INDEX ix_unicaen_perimetre_user_role_linker_user_role ON unicaen_privilege_perimetre_user_role_linker (user_role_id);


-- DATA

/*
 Création des privilèges liés aux périmètres
 */
INSERT INTO unicaen_privilege_privilege_categorie (code, libelle, namespace, ordre)
VALUES
  ('perimetre',   'Gestion des périmètres',   'UnicaenPrivilege\Provider\Privilege',    4)