Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
lib
unicaen
skeleton-application
Commits
74582fe5
Commit
74582fe5
authored
Oct 02, 2019
by
Bertrand Gauthier
Browse files
Merge branch 'postgres' into develop
parents
144f7a31
b10b15e6
Pipeline
#5405
failed with stage
in 9 seconds
Changes
11
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Dockerfile
View file @
74582fe5
###########################################################################################
#
# Image pour le dev.
#
###########################################################################################
ARG
PHP_VERSION
FROM
unicaen-dev-php${PHP_VERSION}-apache
...
...
@@ -18,8 +12,7 @@ ENV APACHE_CONF_DIR=/etc/apache2 \
## Installation de packages requis.
RUN
apt-get update
-qq
&&
\
apt-get
install
-y
\
sqlite3
\
php
${
PHP_VERSION
}
-pdo-sqlite
php
${
PHP_VERSION
}
-pgsql
# Nettoyage
RUN
apt-get autoremove
-y
&&
apt-get clean
&&
rm
-rf
/tmp/
*
/var/tmp/
*
...
...
README.md
View file @
74582fe5
...
...
@@ -11,16 +11,22 @@
## Module Demo
Le module démo fournit une base de données de démonstration permettant d'avoir une authentification locale
qui fonctionne.
Jetez un oeil à la base de données de démo présente dans le module 'Demo' :
$ docker-compose run skeleton-application sqlite3 module/Demo/data/db/demo.sqlite ".schema"
Interrogez la table
`user`
pour vérifier la présence de l'utilisateur local
`demo`
, exemple :
$ docker-compose run skeleton-application sqlite3 module/Demo/data/db/demo.sqlite "select
*
from user;"
Le squelette d'application possède un module "démo" qui utilise une base de données PostgreSQL de démonstration
permettant d'avoir une authentification locale qui fonctionne.
Cette base de données est fournie par le service
`db`
(fichier de config
`docker-compose.yml`
).
Il y a également un service
`adminer`
fournissant de quoi explorer la base de données avec l'outil
[
"Adminer"
](
https://www.adminer.org
)
en vous rendant à l'adresse
`http://localhost:9080`
et en utilisant les informations
de connexion à la bdd présentes dans le
`docker-compose.yml`
.
Pour explorer/administrer la base de données de l'extérieur du container (avec PHPStorm par exemple),
l'adresse de la base est cette fois
`localhost:8432`
.
NB :
-
Grâce au montage
`./data/db:/var/lib/postgresql/data`
spécifié dans
`docker-compose.yml`
, la base de données est
persistée dans le répertoire
`data/db`
de l'appli.
-
Les scripts de création de la base de données exécutés au lancement du container (si la base n'existe pas déjà)
se trouvent dans le répertoire
`./docker/db`
de l'appli et sont fournis au container grâce au montage
`./docker/db/:/docker-entrypoint-initdb.d/`
.
## Configuration du projet
...
...
config/autoload/global.php
View file @
74582fe5
<?php
return
array
(
'translator'
=>
array
(
return
[
'translator'
=>
[
'locale'
=>
'fr_FR'
,
)
,
)
;
]
,
]
;
data/.gitignore
View file @
74582fe5
DoctrineORMModule/
db/
\ No newline at end of file
docker-compose.yml
View file @
74582fe5
...
...
@@ -14,3 +14,22 @@ services:
volumes
:
-
.:/app
working_dir
:
/app
db
:
image
:
postgres
restart
:
always
environment
:
POSTGRES_USER
:
admin
POSTGRES_PASSWORD
:
admin
POSTGRES_DB
:
demo
ports
:
-
8432:5432
volumes
:
-
./data/db:/var/lib/postgresql/data
-
./docker/db/:/docker-entrypoint-initdb.d/
adminer
:
image
:
adminer
restart
:
always
ports
:
-
9080:8080
docker/db/1-schema.sql
0 → 100644
View file @
74582fe5
CREATE
TABLE
"user"
(
id
BIGSERIAL
PRIMARY
KEY
,
username
VARCHAR
(
255
)
DEFAULT
NULL
,
email
VARCHAR
(
255
)
DEFAULT
NULL
,
display_name
VARCHAR
(
64
)
DEFAULT
NULL
,
password
VARCHAR
(
128
)
NOT
NULL
,
state
SMALLINT
default
1
)
;
CREATE
UNIQUE
INDEX
user_username_unique
ON
"user"
(
username
);
alter
table
"user"
add
PASSWORD_RESET_TOKEN
varchar
(
256
)
default
null
;
create
unique
index
USER_PASSWORD_RESET_TOKEN_UN
on
"user"
(
PASSWORD_RESET_TOKEN
);
CREATE
TABLE
user_role
(
id
BIGSERIAL
PRIMARY
KEY
,
role_id
VARCHAR
(
64
)
NOT
NULL
,
is_default
SMALLINT
NOT
NULL
DEFAULT
0
,
parent_id
BIGINT
DEFAULT
NULL
,
ldap_filter
varchar
(
255
)
DEFAULT
NULL
,
FOREIGN
KEY
(
parent_id
)
REFERENCES
user_role
(
id
)
ON
DELETE
SET
NULL
);
CREATE
UNIQUE
INDEX
user_role_roleid_unique
ON
user_role
(
role_id
);
CREATE
TABLE
user_role_linker
(
user_id
BIGINT
NOT
NULL
,
role_id
BIGINT
NOT
NULL
,
PRIMARY
KEY
(
user_id
,
role_id
),
FOREIGN
KEY
(
user_id
)
REFERENCES
"user"
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
role_id
)
REFERENCES
user_role
(
id
)
ON
DELETE
CASCADE
);
CREATE
UNIQUE
INDEX
user_role_linker_unique
ON
user_role_linker
(
user_id
,
role_id
);
CREATE
TABLE
IF
NOT
EXISTS
categorie_privilege
(
id
BIGSERIAL
PRIMARY
KEY
,
code
VARCHAR
(
150
)
NOT
NULL
,
libelle
VARCHAR
(
200
)
NOT
NULL
,
ordre
INT
);
CREATE
UNIQUE
INDEX
categorie_privilege_unique
ON
categorie_privilege
(
code
);
CREATE
TABLE
IF
NOT
EXISTS
privilege
(
id
BIGSERIAL
PRIMARY
KEY
,
categorie_id
BIGINT
NOT
NULL
,
code
VARCHAR
(
150
)
NOT
NULL
,
libelle
VARCHAR
(
200
)
NOT
NULL
,
ordre
INT
,
FOREIGN
KEY
(
categorie_id
)
REFERENCES
categorie_privilege
(
id
)
ON
DELETE
CASCADE
);
CREATE
UNIQUE
INDEX
privilege_unique
ON
privilege
(
code
);
CREATE
TABLE
IF
NOT
EXISTS
role_privilege
(
role_id
BIGINT
NOT
NULL
,
privilege_id
BIGINT
NOT
NULL
,
PRIMARY
KEY
(
role_id
,
privilege_id
),
FOREIGN
KEY
(
role_id
)
REFERENCES
user_role
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
privilege_id
)
REFERENCES
privilege
(
id
)
ON
DELETE
CASCADE
);
CREATE
UNIQUE
INDEX
role_privilege_unique
ON
role_privilege
(
role_id
,
privilege_id
);
docker/db/2-data.sql
0 → 100644
View file @
74582fe5
-- Données
INSERT
INTO
user_role
(
id
,
role_id
,
is_default
,
parent_id
)
VALUES
(
1
,
'Standard'
,
1
,
NULL
),
(
2
,
'Gestionnaire'
,
0
,
1
),
(
3
,
'Super-gestionnaire'
,
0
,
2
),
(
4
,
'Administrateur'
,
0
,
3
);
INSERT
INTO
categorie_privilege
(
id
,
code
,
libelle
,
ordre
)
VALUES
(
1
,
'droit'
,
'Gestion des droits'
,
1
);
INSERT
INTO
privilege
(
id
,
categorie_id
,
code
,
libelle
,
ordre
)
VALUES
(
1
,
1
,
'role-visualisation'
,
'Rôles - Visualisation'
,
1
),
(
2
,
1
,
'role-edition'
,
'Rôles - Édition'
,
2
),
(
3
,
1
,
'privilege-visualisation'
,
'Privilèges - Visualisation'
,
3
),
(
4
,
1
,
'privilege-edition'
,
'Privilèges - Édition'
,
4
);
INSERT
INTO
role_privilege
(
role_id
,
privilege_id
)
VALUES
(
4
,
1
),
(
4
,
2
),
(
4
,
3
),
(
4
,
4
);
INSERT
INTO
"user"
(
username
,
email
,
display_name
,
password
,
state
)
VALUES
-- utilisateur demo/azerty
(
'demo'
,
'demo@mail.fr'
,
'Demo Crite'
,
'$2y$10$PxXnVLYnGEzEnfqPqRKJSe9AabocES2H4bBK5VzzJlzuj1rVt7Lwu'
,
1
);
INSERT
INTO
user_role_linker
(
user_id
,
role_id
)
SELECT
u
.
id
,
r
.
id
FROM
"user"
u
,
user_role
r
WHERE
u
.
username
=
'demo'
and
r
.
role_id
=
'Standard'
;
module/Demo/bin/create_demo_db.sh
deleted
100755 → 0
View file @
144f7a31
#!/usr/bin/env bash
DIR
=
$(
cd
`
dirname
$0
`
&&
pwd
)
DBPATH
=
${
DIR
}
/../data/db/demo.sqlite
sqlite3
${
DBPATH
}
<
${
DIR
}
/../data/demo.sqlite.sql
&&
\
chmod
777
${
DBPATH
}
&&
\
chmod
777
`
dirname
${
DBPATH
}
`
module/Demo/config/module.config.php
View file @
74582fe5
...
...
@@ -3,16 +3,26 @@
namespace
Demo
;
return
[
//
// ATTENTION: config Doctrine à déplacer dans `APP/config/autoload/`.
//
'doctrine'
=>
[
'connection'
=>
[
'orm_default'
=>
[
'driverClass'
=>
'
Doctrine\DBAL\Driver\PDOSql
ite
\Driver
'
,
'driverClass'
=>
\
Doctrine\DBAL\Driver\PDO
Pg
Sql\Driver
::
class
,
'params'
=>
[
'path'
=>
__DIR__
.
'/../data/db/demo.sqlite'
,
'host'
=>
'db'
,
//
'user'
=>
'admin'
,
// cf. docker-compose.yml
'password'
=>
'admin'
,
//
'dbname'
=>
'demo'
,
//
'port'
=>
'5432'
,
'charset'
=>
'utf8'
,
'driverOptions'
=>
[
1002
=>
'SET NAMES utf8'
]
],
],
],
],
'bjyauthorize'
=>
[
'guards'
=>
[
'BjyAuthorize\Guard\Controller'
=>
[
...
...
module/Demo/data/db/demo.sqlite
deleted
100755 → 0
View file @
144f7a31
File deleted
module/Demo/data/demo.sqlite.sql
deleted
100644 → 0
View file @
144f7a31
CREATE
TABLE
IF
NOT
EXISTS
user
(
id
INTEGER
PRIMARY
KEY
AUTOINCREMENT
NOT
NULL
,
username
VARCHAR
(
255
)
DEFAULT
NULL
,
email
VARCHAR
(
255
)
DEFAULT
NULL
,
display_name
VARCHAR
(
64
)
DEFAULT
NULL
,
password
VARCHAR
(
128
)
NOT
NULL
,
state
SMALLINT
default
1
);
ALTER
TABLE
user
ADD
PASSWORD_RESET_TOKEN
varchar
(
256
)
DEFAULT
NULL
;
CREATE
UNIQUE
INDEX
user_unique_username
ON
user
(
username
);
CREATE
UNIQUE
INDEX
USER_PASSWORD_RESET_TOKEN_UN
ON
user
(
PASSWORD_RESET_TOKEN
);
CREATE
TABLE
IF
NOT
EXISTS
user_role
(
id
INTEGER
PRIMARY
KEY
AUTOINCREMENT
NOT
NULL
,
role_id
VARCHAR
(
64
)
NOT
NULL
,
is_default
TINYINT
(
1
)
NOT
NULL
DEFAULT
0
,
parent_id
INTEGER
NULL
DEFAULT
NULL
,
ldap_filter
varchar
(
255
)
DEFAULT
NULL
,
FOREIGN
KEY
(
parent_id
)
REFERENCES
user_role
(
id
)
ON
DELETE
SET
NULL
);
CREATE
UNIQUE
INDEX
role_unique_role_id
ON
user_role
(
role_id
);
CREATE
INDEX
role_idx_parent_id
ON
user_role
(
parent_id
);
CREATE
TABLE
IF
NOT
EXISTS
user_role_linker
(
user_id
INTEGER
NOT
NULL
,
role_id
INTEGER
NOT
NULL
,
PRIMARY
KEY
(
user_id
,
role_id
),
FOREIGN
KEY
(
role_id
)
REFERENCES
user_role
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
user_id
)
REFERENCES
user
(
id
)
ON
DELETE
CASCADE
);
CREATE
INDEX
user_role_linker_idx_role_id
ON
user_role_linker
(
role_id
);
CREATE
INDEX
user_role_linker_idx_user_id
ON
user_role_linker
(
user_id
);
CREATE
TABLE
IF
NOT
EXISTS
categorie_privilege
(
id
INTEGER
NOT
NULL
PRIMARY
KEY
AUTOINCREMENT
,
code
VARCHAR
(
150
)
NOT
NULL
,
libelle
VARCHAR
(
200
)
NOT
NULL
,
ordre
INTEGER
);
CREATE
UNIQUE
INDEX
categorie_unique_code
ON
categorie_privilege
(
code
);
CREATE
TABLE
IF
NOT
EXISTS
privilege
(
id
INTEGER
NOT
NULL
PRIMARY
KEY
AUTOINCREMENT
,
categorie_id
INTEGER
NOT
NULL
,
code
VARCHAR
(
150
)
NOT
NULL
,
libelle
VARCHAR
(
200
)
NOT
NULL
,
ordre
INTEGER
,
FOREIGN
KEY
(
categorie_id
)
REFERENCES
categorie_privilege
(
id
)
ON
DELETE
CASCADE
);
CREATE
UNIQUE
INDEX
privilege_unique_code
ON
privilege
(
code
);
CREATE
TABLE
IF
NOT
EXISTS
role_privilege
(
role_id
INTEGER
NOT
NULL
,
privilege_id
INTEGER
NOT
NULL
,
PRIMARY
KEY
(
role_id
,
privilege_id
),
FOREIGN
KEY
(
role_id
)
REFERENCES
user_role
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
privilege_id
)
REFERENCES
privilege
(
id
)
ON
DELETE
CASCADE
);
CREATE
INDEX
idx_role_id
on
role_privilege
(
role_id
);
CREATE
INDEX
idx_privilege_id
on
role_privilege
(
privilege_id
);
-- Données
INSERT
INTO
user_role
(
id
,
role_id
,
is_default
,
parent_id
)
VALUES
(
1
,
'Standard'
,
1
,
NULL
),
(
2
,
'Gestionnaire'
,
0
,
1
),
(
3
,
'Super-gestionnaire'
,
0
,
2
),
(
4
,
'Administrateur'
,
0
,
3
);
INSERT
INTO
categorie_privilege
(
id
,
code
,
libelle
,
ordre
)
VALUES
(
1
,
'droit'
,
'Gestion des droits'
,
1
);
INSERT
INTO
privilege
(
id
,
categorie_id
,
code
,
libelle
,
ordre
)
VALUES
(
1
,
1
,
'role-visualisation'
,
'Rôles - Visualisation'
,
1
),
(
2
,
1
,
'role-edition'
,
'Rôles - Édition'
,
2
),
(
3
,
1
,
'privilege-visualisation'
,
'Privilèges - Visualisation'
,
3
),
(
4
,
1
,
'privilege-edition'
,
'Privilèges - Édition'
,
4
);
INSERT
INTO
role_privilege
(
role_id
,
privilege_id
)
VALUES
(
4
,
1
),
(
4
,
2
),
(
4
,
3
),
(
4
,
4
);
INSERT
INTO
user
(
username
,
email
,
display_name
,
password
,
state
)
VALUES
-- utilisateur demo/azerty
(
'demo'
,
'demo@mail.fr'
,
'Demo'
,
'$2y$10$PxXnVLYnGEzEnfqPqRKJSe9AabocES2H4bBK5VzzJlzuj1rVt7Lwu'
,
1
);
INSERT
INTO
user_role_linker
(
user_id
,
role_id
)
SELECT
u
.
id
,
r
.
id
FROM
user
u
,
user_role
r
WHERE
u
.
username
=
'demo'
and
r
.
role_id
=
'Standard'
;
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment