Commit 5be3544b authored by David Surville's avatar David Surville
Browse files

Merge branch 'auth_migration'

parents dbd215a0 0364a982
Loading
Loading
Loading
Loading
+14 −28
Original line number Diff line number Diff line
@@ -9,6 +9,12 @@ use UnicaenUtilisateur\Form\Role\RoleHydratorFactory;
use UnicaenUtilisateur\Service\Role\RoleService;
use UnicaenUtilisateur\Service\Role\RoleServiceFactory;
use UnicaenUtilisateur\Provider\Privilege\RolePrivileges;
use UnicaenUtilisateur\Provider\Role\Config;
use UnicaenUtilisateur\Provider\Role\ConfigServiceFactory;
use UnicaenUtilisateur\Provider\Role\DbRole;
use UnicaenUtilisateur\Provider\Role\DbRoleServiceFactory;
use UnicaenUtilisateur\Provider\Role\Username;
use UnicaenUtilisateur\Provider\Role\UsernameServiceFactory;
use UnicaenPrivilege\Guard\PrivilegeController;
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;
@@ -21,7 +27,7 @@ return [
                    'controller' => RoleController::class,
                    'action' => [
                        'index',
                        'listing',
                        'exporter',
                    ],
                    'privileges' => [
                        RolePrivileges::ROLE_AFFICHER,
@@ -50,28 +56,9 @@ return [
        ],
    ],

    'navigation' => [
        'default' => [
            'home' => [
                'pages' => [
                    'administration' => [
                        'pages' => [
                            'role' => [
                                'label' => 'Rôle',
                                'route' => 'role',
                                'resource' => RolePrivileges::getResourceId(RolePrivileges::ROLE_AFFICHER),
                                'order'    => 1002,
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'router' => [
        'routes' => [
            'role' => [
            'unicaen-role' => [
                'type' => Literal::class,
                'options' => [
                    'route' => '/role',
@@ -82,13 +69,13 @@ return [
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'listing' => [
                    'exporter' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'       => '/listing/:role',
                            'route'       => '/exporter/:role',
                            'defaults'    => [
                                'controller' => RoleController::class,
                                'action' => 'listing',
                                'action' => 'exporter',
                            ],
                        ],
                    ],
@@ -129,10 +116,9 @@ return [

    'service_manager' => [
        'factories' => [
            'UnicaenUtilisateur\Provider\Role\Config'         => 'UnicaenUtilisateur\Provider\Role\ConfigServiceFactory',
            'UnicaenUtilisateur\Provider\Role\Config'         => 'UnicaenUtilisateur\Provider\Role\ConfigServiceFactory',
            'UnicaenUtilisateur\Provider\Role\DbRole'         => 'UnicaenUtilisateur\Provider\Role\DbRoleServiceFactory',
            'UnicaenUtilisateur\Provider\Role\Username'       => 'UnicaenUtilisateur\Provider\Role\UsernameServiceFactory',
            Config::class => ConfigServiceFactory::class,
            DbRole::class => DbRoleServiceFactory::class,
            Username::class => UsernameServiceFactory::class,
            RoleService::class => RoleServiceFactory::class,
        ],
    ],
+35 −68
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ use UnicaenUtilisateur\Form\User\UserForm;
use UnicaenUtilisateur\Form\User\UserFormFactory;
use UnicaenUtilisateur\Form\User\UserHydrator;
use UnicaenUtilisateur\Form\User\UserHydratorFactory;
use UnicaenUtilisateur\Form\User\UserRechercheForm;
use UnicaenUtilisateur\Provider\Privilege\UtilisateurPrivileges;
use UnicaenUtilisateur\Service\Role\RoleService;
use UnicaenUtilisateur\Service\Role\RoleServiceFactory;
@@ -16,6 +17,17 @@ use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;

return [

    'unicaen-utilisateur' => [
        /**
         * Liste des services utilisée pour rechercher un utilisateur existant ou à ajouter dans l'application.
         * Le service 'app' est défini par défaut et va rechercher dans la table des utilisateurs défini dans le paramètre 'user_entity_class'.
         */
        'recherche-individu' => [
            'app'       => UserService::class,
        ],
    ],

    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
@@ -24,9 +36,8 @@ return [
                    'action' => [
                        'index',
                        'rechercher',
                        'rechercher-utilisateur',
                        'listing',
                        'export'
                        'lister',
                        'exporter'
                    ],
                    'privileges' => [
                        UtilisateurPrivileges::UTILISATEUR_AFFICHER,
@@ -35,7 +46,7 @@ return [
                [
                    'controller' => UtilisateurController::class,
                    'action' => [
                        'effacer',
                        'supprimer',
                        'ajouter',
                    ],
                    'privileges' => [
@@ -45,7 +56,7 @@ return [
                [
                    'controller' => UtilisateurController::class,
                    'action' => [
                        'changer-status',
                        'changer-statut',
                    ],
                    'privileges' => [
                        UtilisateurPrivileges::UTILISATEUR_CHANGERSTATUS,
@@ -65,43 +76,9 @@ return [
        ],
    ],

    'navigation' => [
        'default' => [
            'home' => [
                'pages' => [
                    'administration' => [
                        'pages' => [
                            'utilisateur' => [
                                'label' => 'Utilisateur',
                                'route' => 'utilisateur-preecog',
                                'resource' => UtilisateurPrivileges::getResourceId(UtilisateurPrivileges::UTILISATEUR_AFFICHER),
                                'order'    => 1001,
                                'pages' => [
                                    'listing-utilisateur' => [
                                        'label' => 'Listing',
                                        'route' => 'utilisateur-preecog/listing',
                                        'resource' => UtilisateurPrivileges::getResourceId(UtilisateurPrivileges::UTILISATEUR_AFFICHER),
                                        'order'    => 10001,
                                    ],
                                    'ajouter-utilisateur' => [
                                        'label' => 'Listing',
                                        'route' => 'utilisateur-preecog/ajouter',
                                        'resource' => UtilisateurPrivileges::getResourceId(UtilisateurPrivileges::UTILISATEUR_AJOUTER),
                                        'order'    => 10001,
                                    ],
                                ],
                            ],

                        ],
                    ],
                ],
            ],
        ],
    ],

    'router' => [
        'routes' => [
            'utilisateur-preecog' => [
            'unicaen-utilisateur' => [
                'type' => Literal::class,
                'options' => [
                    'route' => '/utilisateur',
@@ -112,13 +89,13 @@ return [
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'listing' => [
                    'lister' => [
                        'type'          => Literal::class,
                        'options'       => [
                            'route'       => '/listing',
                            'route'       => '/lister',
                            'defaults'    => [
                                'controller' => UtilisateurController::class,
                                'action' => 'listing',
                                'action' => 'lister',
                            ],
                        ],
                    ],
@@ -132,36 +109,26 @@ return [
                            ],
                        ],
                    ],
                    'export' => [
                    'exporter' => [
                        'type'          => Literal::class,
                        'options'       => [
                            'route'       => '/export',
                            'route'       => '/exporter',
                            'defaults'    => [
                                'controller' => UtilisateurController::class,
                                'action' => 'export',
                                'action' => 'exporter',
                            ],
                        ],
                    ],
                    'rechercher' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'       => '/rechercher[/:service-name]',
                            'route'       => '/rechercher',
                            'defaults'    => [
                                'controller' => UtilisateurController::class,
                                'action' => 'rechercher',
                            ],
                        ],
                    ],
                    'rechercher-utilisateur' => [
                        'type'          => Literal::class,
                        'options'       => [
                            'route'       => '/rechercher-utilisateur',
                            'defaults'    => [
                                'controller' => UtilisateurController::class,
                                'action' => 'rechercher-utilisateur',
                            ],
                        ],
                    ],
                    'add-role' => [
                        'type'          => Segment::class,
                        'options'       => [
@@ -182,23 +149,23 @@ return [
                            ],
                        ],
                    ],
                    'changer-status' => [
                    'changer-statut' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'       => '/changer-status/:utilisateur',
                            'route'       => '/changer-statut/:utilisateur',
                            'defaults'    => [
                                'controller' => UtilisateurController::class,
                                'action' => 'changer-status',
                                'action' => 'changer-statut',
                            ],
                        ],
                    ],
                    'effacer' => [
                    'supprimer' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'       => '/effacer/:utilisateur',
                            'route'       => '/supprimer/:utilisateur',
                            'defaults'    => [
                                'controller' => UtilisateurController::class,
                                'action' => 'effacer',
                                'action' => 'supprimer',
                            ],
                        ],
                    ],
@@ -213,16 +180,16 @@ return [
            RoleService::class => RoleServiceFactory::class,
        ],
    ],

    'form_elements' => [
        'factories' => [
            UserForm::class => UserFormFactory::class,
        'invokables' => [
            UserRechercheForm::class => UserRechercheForm::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            UserHydrator::class => UserHydratorFactory::class,
            UserForm::class => UserFormFactory::class,
        ],
    ],

    'controllers'     => [
        'factories' => [
            UtilisateurController::class => UtilisateurControllerFactory::class,
+82 −13
Original line number Diff line number Diff line
<?php

use Octopus\Service\Individu\IndividuService;
use UnicaenUtilisateur\Service\OtherSources\LdapService;
use UnicaenAuthentification\Provider\Identity\Chain;
use UnicaenUtilisateur\Entity\Db\Role;
use UnicaenUtilisateur\Entity\Db\User;
use UnicaenUtilisateur\Provider\Privilege\RolePrivileges;
use UnicaenUtilisateur\Provider\Privilege\UtilisateurPrivileges;
use UnicaenUtilisateur\Provider\Role\DbRole;
use UnicaenUtilisateur\Provider\Role\Username;
use UnicaenUtilisateur\Service\User\UserService;
use UnicaenUtilisateur\Service\OtherSources\LdapService;

return [
    /**
     * L'entité associée aux utilisateurs peut être spécifiée via la clef de configuration ['zfcuser']['user_entity_class']
     * si elle est manquante alors la classe \UnicaenUtiliseur\Entity\Db\User est utilisée
     * NB: la classe spécifiée doit hériter de \UnicaenUtiliseur\Entity\Db\AbstractUser.
     * Si elle est manquante alors la classe @see \UnicaenUtilisateur\Entity\Db\User est utilisée
     * NB: la classe spécifiée doit hériter de @see \UnicaenUtilisateur\Entity\Db\AbstractUser
     */
    'zfcuser' => [
        'user_entity_class' => \UnicaenUtilisateur\Entity\Db\User::class,
        'user_entity_class' => User::class,

        /**
         * Enable registration
         * Allows users to register through the website.
         * Accepted values: boolean true or false
         */
        'enable_registration' => false,
    ],

    'bjyauthorize' => [
        /* this module uses a meta-role that inherits from any roles that should
         * be applied to the active user. the identity provider tells us which
         * roles the "identity role" should inherit from.
         *
         * for ZfcUser, this will be your default identity provider
         */
        'identity_provider' => Chain::class,

        /* role providers simply provide a list of roles that should be inserted
         * into the Zend\Acl instance. the module comes with two providers, one
         * to specify roles in a config file and one to load roles using a
         * Zend\Db adapter.
         */
        'role_providers'    => [
            /**
     * L'entité associée aux roles peut être spécifiée via la clef de configuration ['unicaen_auth']['role_entity_class']
     * si elle est manquante alors la classe \UnicaenUtiliseur\Entity\Db\Role est utilisée
     * NB: la classe spécifiée doit hériter de \UnicaenUtiliseur\Entity\Db\AbstractRole.
             * Fournit les rôles issus de la base de données éventuelle de l'appli.
             * NB: si le rôle par défaut 'guest' est fourni ici, il ne sera pas ajouté en double dans les ACL.
             * NB: si la connexion à la base échoue, ce n'est pas bloquant!
             */
            DbRole::class   => [],

            /**
             * Fournit le rôle correspondant à l'identifiant de connexion de l'utilisateur.
             * Cela est utile lorsque l'on veut gérer les habilitations d'un utilisateur unique
             * sur des ressources.
             */
            Username::class => [],
        ],
    ],

    'unicaen-auth' => [
        'role_entity_class' => \UnicaenUtilisateur\Entity\Db\Role::class,
        /**
         * L'entité associée aux roles peut être spécifiée via la clef de configuration ['unicaen_auth']['role_entity_class']
         * Si elle est manquante alors la classe @see \UnicaenUtilisateur\Entity\Db\Role est utilisée
         * NB: la classe spécifiée doit hériter de @see \UnicaenUtilisateur\Entity\Db\AbstractRole
         */
        'role_entity_class' => Role::class,
    ],

    'unicaen-utilisateur' => [
        'recherche-individu' => [
            'app'       => UserService::class,
            'ldap'      => LdapService::class,
            'octopus'   => IndividuService::class,
//            'ldap'      => LdapService::class,
//            'octopus'   => IndividuService::class,
        ],
    ],

    'navigation' => [
        'default' => [
            'home' => [
                'pages' => [
                    'droits' => [
                        'pages' => [
                            [
                                'label' => 'Gérer les utilisateurs',
                                'title' => 'Gérer les utilisateurs',
                                'route' => 'unicaen-utilisateur',
                                'resource' => UtilisateurPrivileges::getResourceId(UtilisateurPrivileges::UTILISATEUR_AFFICHER),
                            ],
                            [
                                'label' => 'Gérer les rôles',
                                'title' => 'Gérer les rôles',
                                'route' => 'unicaen-role',
                                'resource' => RolePrivileges::getResourceId(RolePrivileges::ROLE_AFFICHER),
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
];
 No newline at end of file
+78 −0
Original line number Diff line number Diff line
-- -----------------------------------------------------
-- TABLE UNICAEN_UTILISATEUR_ROLE
-- -----------------------------------------------------
CREATE SEQUENCE UNICAEN_UTILISATEUR_ROLE_ID_SEQ NOCYCLE START WITH 1 INCREMENT BY 1 MINVALUE 0;

CREATE TABLE UNICAEN_UTILISATEUR_ROLE (
  ID                    NUMBER(*, 0)    NOT NULL,
  ROLE_ID               VARCHAR2(64)    NOT NULL,
  LIBELLE               VARCHAR2(255)   NOT NULL,
  IS_DEFAULT            NUMBER(1)       DEFAULT 0 NOT NULL,
  IS_AUTO               NUMBER(1)       DEFAULT 0 NOT NULL,
  PARENT_ID             NUMBER(*, 0),
  LDAP_FILTER           VARCHAR2(255),
  ACCESSIBLE_EXTERIEUR  NUMBER(1)       DEFAULT 1 NOT NULL,
  CONSTRAINT PK_UNICAEN_UTILISATEUR_ROLE PRIMARY KEY (ID),
  CONSTRAINT UN_UNICAEN_UTILISATEUR_ROLE_ROLE UNIQUE (ROLE_ID),
  CONSTRAINT FK_UNICAEN_UTILISATEUR_ROLE_PARENT FOREIGN KEY (PARENT_ID) REFERENCES UNICAEN_UTILISATEUR_ROLE (ID) DEFERRABLE INITIALLY IMMEDIATE
);

CREATE INDEX IX_UTILISATEUR_ROLE_PARENT ON UTILISATEUR_ROLE (PARENT_ID);


-- -----------------------------------------------------
-- TABLE UNICAEN_UTILISATEUR_USER
-- -----------------------------------------------------
CREATE SEQUENCE UNICAEN_UTILISATEUR_USER_ID_SEQ NOCYCLE START WITH 1 INCREMENT BY 1 MINVALUE 0;

CREATE TABLE UNICAEN_UTILISATEUR_USER (
  ID                    NUMBER(*, 0)       NOT NULL,
  USERNAME              VARCHAR2(255 CHAR) NOT NULL,
  DISPLAY_NAME          VARCHAR2(255 CHAR) NOT NULL,
  EMAIL                 VARCHAR2(255 CHAR) NULL,
  PASSWORD              VARCHAR2(128 CHAR) NOT NULL,
  STATE                 SMALLINT DEFAULT 1 NOT NULL,
  PASSWORD_RESET_TOKEN  VARCHAR2(256) DEFAULT NULL,
  LAST_ROLE_ID          NUMBER(*,0),
  CONSTRAINT PK_UNICAEN_UTILISATEUR_USER PRIMARY KEY (ID),
  CONSTRAINT UN_UNICAEN_UTILISATEUR_USER_USERNAME UNIQUE (USERNAME),
  CONSTRAINT UN_UNICAEN_UTILISATEUR_USER_PASSWORD_RESET_TOKEN UNIQUE (PASSWORD_RESET_TOKEN),
  CONSTRAINT FK_UNICAEN_UTILISATEUR_USER_LAST_ROLE FOREIGN KEY (LAST_ROLE_ID) REFERENCES UNICAEN_UTILISATEUR_ROLE(ID) DEFERRABLE INITIALLY IMMEDIATE
);

CREATE INDEX IX_UNICAEN_UTILISATEUR_USER_LAST_ROLE ON UNICAEN_UTILISATEUR_USER(LAST_ROLE_ID);


-- -----------------------------------------------------
-- TABLE UNICAEN_UTILISATEUR_ROLE_LINKER
-- -----------------------------------------------------
CREATE TABLE UNICAEN_UTILISATEUR_ROLE_LINKER (
  UTILISATEUR_ID  NUMBER(*, 0) NOT NULL,
  ROLE_ID         NUMBER(*, 0) NOT NULL,
  CONSTRAINT PK_UNICAEN_UTILISATEUR_ROLE_LINKER PRIMARY KEY (UTILISATEUR_ID, ROLE_ID),
  CONSTRAINT FK_UNICAEN_UTILISATEUR_ROLE_LINKER_USER FOREIGN KEY (UTILISATEUR_ID) REFERENCES UNICAEN_UTILISATEUR_USER (ID) DEFERRABLE INITIALLY IMMEDIATE,
  CONSTRAINT FK_UNICAEN_UTILISATEUR_ROLE_LINKER_ROLE FOREIGN KEY (ROLE_ID) REFERENCES UNICAEN_UTILISATEUR_ROLE (ID) DEFERRABLE INITIALLY IMMEDIATE
);

CREATE INDEX IX_UNICAEN_UTILISATEUR_ROLE_LINKER_USER ON UNICAEN_UTILISATEUR_ROLE_LINKER (UTILISATEUR_ID);
CREATE INDEX IX_UNICAEN_UTILISATEUR_ROLE_LINKER_ROLE ON UNICAEN_UTILISATEUR_ROLE_LINKER (ROLE_ID);


-- DATA

INSERT INTO UNICAEN_UTILISATEUR_USER (
  ID,
  USERNAME,
  EMAIL,
  DISPLAY_NAME,
  PASSWORD)
WITH tmp AS (
  SELECT 1, 'app' u, 'dsi.applications@unicaen.fr'  e, 'Application'  n, 'application' p FROM dual
)
SELECT
  UNICAEN_UTILISATEUR_USER_ID_SEQ.nextval,
  tmp.u,
  tmp.e,
  tmp.n,
  tmp.p
FROM tmp;
 No newline at end of file
+74 −0
Original line number Diff line number Diff line
-- -----------------------------------------------------
-- TABLE UNICAEN_UTILISATEUR_ROLE
-- -----------------------------------------------------
CREATE TABLE UNICAEN_UTILISATEUR_ROLE (
  ID                    SERIAL        PRIMARY KEY,
  ROLE_ID               VARCHAR(64)   NOT NULL,
  LIBELLE               VARCHAR(255)  NOT NULL,
  IS_DEFAULT            BOOLEAN       DEFAULT false NOT NULL,
  IS_AUTO               BOOLEAN       DEFAULT false NOT NULL,
  PARENT_ID             INTEGER,
  LDAP_FILTER           VARCHAR(255)  DEFAULT NULL::character varying,
  ACCESSIBLE_EXTERIEUR  BOOLEAN       DEFAULT true NOT NULL,
  CONSTRAINT FK_UNICAEN_UTILISATEUR_ROLE_PARENT FOREIGN KEY (PARENT_ID) REFERENCES UNICAEN_UTILISATEUR_ROLE (ID) DEFERRABLE INITIALLY IMMEDIATE
);

CREATE UNIQUE INDEX UN_UNICAEN_UTILISATEUR_ROLE_ROLE_ID ON UNICAEN_UTILISATEUR_ROLE (ROLE_ID);
CREATE INDEX IX_UNICAEN_UTILISATEUR_ROLE_PARENT ON UNICAEN_UTILISATEUR_ROLE (PARENT_ID);


-- -----------------------------------------------------
-- TABLE UNICAEN_UTILISATEUR_USER
-- -----------------------------------------------------
CREATE TABLE UNICAEN_UTILISATEUR_USER (
  ID                    SERIAL        PRIMARY KEY,
  USERNAME              VARCHAR(255)  NOT NULL,
  DISPLAY_NAME          VARCHAR(255)  NOT NULL,
  EMAIL                 VARCHAR(255),
  PASSWORD              VARCHAR(128)  DEFAULT 'application'::character varying NOT NULL,
  STATE                 BOOLEAN       DEFAULT true NOT NULL,
  PASSWORD_RESET_TOKEN  VARCHAR(256),
  LAST_ROLE_ID          INTEGER,
  CONSTRAINT UN_UNICAEN_UTILISATEUR_USER_USERNAME UNIQUE (USERNAME),
  CONSTRAINT UN_UNICAEN_UTILISATEUR_USER_PASSWORD_RESET_TOKEN UNIQUE (PASSWORD_RESET_TOKEN),
  CONSTRAINT FK_UNICAEN_UTILISATEUR_USER_LAST_ROLE FOREIGN KEY (LAST_ROLE_ID) REFERENCES UNICAEN_UTILISATEUR_ROLE(ID) DEFERRABLE INITIALLY IMMEDIATE
);

CREATE UNIQUE INDEX UN_UNICAEN_UTILISATEUR_USER_USERNAME ON UNICAEN_UTILISATEUR_USER(USERNAME);
CREATE UNIQUE INDEX UN_UNICAEN_UTILISATEUR_USER_PASSWORD_RESET_TOKEN ON UNICAEN_UTILISATEUR_USER(PASSWORD_RESET_TOKEN);
CREATE INDEX IX_UNICAEN_UTILISATEUR_USER_LAST_ROLE ON UNICAEN_UTILISATEUR_USER(LAST_ROLE_ID);


-- -----------------------------------------------------
-- TABLE UNICAEN_UTILISATEUR_ROLE_LINKER
-- -----------------------------------------------------
CREATE TABLE UNICAEN_UTILISATEUR_ROLE_LINKER (
  UTILISATEUR_ID  INTEGER NOT NULL,
  ROLE_ID         INTEGER NOT NULL,
  CONSTRAINT PK_UNICAEN_UTILISATEUR_ROLE_LINKER PRIMARY KEY (UTILISATEUR_ID, ROLE_ID),
  CONSTRAINT FK_UNICAEN_UTILISATEUR_ROLE_LINKER_USER FOREIGN KEY (UTILISATEUR_ID) REFERENCES UNICAEN_UTILISATEUR_USER (ID) DEFERRABLE INITIALLY IMMEDIATE,
  CONSTRAINT FK_UNICAEN_UTILISATEUR_ROLE_LINKER_ROLE FOREIGN KEY (ROLE_ID) REFERENCES UNICAEN_UTILISATEUR_ROLE (ID) DEFERRABLE INITIALLY IMMEDIATE
);

CREATE INDEX IX_UNICAEN_UTILISATEUR_ROLE_LINKER_USER ON UNICAEN_UTILISATEUR_ROLE_LINKER (UTILISATEUR_ID);
CREATE INDEX IX_UNICAEN_UTILISATEUR_ROLE_LINKER_ROLE ON UNICAEN_UTILISATEUR_ROLE_LINKER (ROLE_ID);


-- DATA

INSERT INTO UNICAEN_UTILISATEUR_USER (
  ID,
  USERNAME,
  EMAIL,
  DISPLAY_NAME,
  PASSWORD)
WITH tmp AS (
  SELECT 1, 'app' u, 'dsi.applications@unicaen.fr'  e, 'Application'  n, 'application' p FROM dual
)
SELECT
  UNICAEN_UTILISATEUR_USER_ID_SEQ.nextval,
  tmp.u,
  tmp.e,
  tmp.n,
  tmp.p
FROM tmp;
 No newline at end of file
Loading