Skip to content
Snippets Groups Projects
Commit 2231c6b5 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Merge branch 'develop'

parents d501176d 74582fe5
No related branches found
No related tags found
No related merge requests found
Pipeline #5408 failed
CHANGELOG
=========
1.0.0 (19/09/2019)
------------------
### Ajout
- Embryon d'application.
###########################################################################################
#
# 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/*
......
LICENSE 0 → 100644
This diff is collapsed.
......@@ -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
......
#!/usr/bin/env php
<?php
/**
* Script à utiliser pour mettre à jour la version courante de l'application,
* configurée dans 'config/autoload/version.global.php'.
*
* Usage: bump-version [<version>]
*
* Ex: bump-version 1.3
*/
require __DIR__ . '/../vendor/autoload.php';
use Zend\Config\Writer\PhpArray;
$defaultConfig = [
'unicaen-app' => [
'app_infos' => [
'version' => 'Aucune',
],
]
];
$configFilepath = 'config/autoload/version.global.php';
echo "Fichier de config: $configFilepath" . PHP_EOL;
if (!is_readable($configFilepath)) {
echo "Fichier de config $configFilepath introuvable ou illisible." . PHP_EOL;
exit(1);
}
$config = require $configFilepath;
if (! isset($config['unicaen-app']['app_infos']['version'])) {
$config = array_merge_recursive($config, $defaultConfig);
}
$current = $config['unicaen-app']['app_infos']['version'];
echo sprintf("Version actuelle: %s.", $current) . PHP_EOL;
$new = isset($argv[1]) ? $argv[1] : null;
if ($new === null) {
$message = "Nouvelle version ? ";
$new = readline($message);
}
if (version_compare($new, $current) <= 0) {
echo ":-( Impossible, la nouvelle version doit être supérieure à l'actuelle." . PHP_EOL;
exit(1);
}
$config['unicaen-app']['app_infos']['version'] = $new;
$config['unicaen-app']['app_infos']['date'] = date('d/m/Y');
$config['comment'] = "Fichier généré le " . date('d/m/Y à H:i:s') . ' avec ' . __FILE__;
$phpArray = new PhpArray();
$phpArray
->setUseBracketArraySyntax(true)
->toFile($configFilepath, $config);
echo "Nouvelle version inscrite: $new" . PHP_EOL;
<?php
return array(
'translator' => array(
return [
'translator' => [
'locale' => 'fr_FR',
),
);
],
];
......@@ -19,8 +19,8 @@ return [
'app_infos' => [
'nom' => "NomDeVotreApplication",
'desc' => "Description succincte de votre application",
'version' => "0.0.1",
'date' => "07/11/2017",
//'version' => cf. 'version.global.php'
//'date' => cf. 'version.global.php'
'contact' => ['mail' => "dsi.applications@unicaen.fr", /*'tel' => "01 02 03 04 05"*/],
'mentionsLegales' => "http://www.unicaen.fr/acces-direct/mentions-legales/",
'informatiqueEtLibertes' => "http://www.unicaen.fr/acces-direct/informatique-et-libertes/",
......
<?php
return [
'unicaen-app' => [
'app_infos' => [
'version' => '1.0.0',
'date' => '19/09/2019',
],
],
'comment' => 'Fichier généré le 19/09/2019 à 07:52:13 avec /app/bin/bump-version',
];
DoctrineORMModule/
db/
\ No newline at end of file
......@@ -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
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);
-- 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';
#!/usr/bin/env bash
#
# This script runs required operations in order to set up the application.
#
# Composer install
composer install --no-dev --no-suggest --optimize-autoloader
# mpdf/mpdf/ttfontdata dir access
#chown -R www-data:root vendor/mpdf/mpdf/ttfontdata && chmod -R 770 vendor/mpdf/mpdf/ttfontdata
# Répertoire d'upload par défaut
#mkdir -p upload && chown -R www-data:root upload && chmod -R 770 upload
# Répertoires de travail de Doctrine
mkdir -p data/cache && chmod -R 777 data/cache
mkdir -p data/DoctrineModule/cache && chmod -R 777 data/DoctrineModule/cache
mkdir -p data/DoctrineORMModule/Proxy && chmod -R 777 data/DoctrineORMModule/Proxy
rm -rf data/cache/*
rm -rf data/DoctrineModule/cache/*
rm -rf data/DoctrineORMModule/Proxy/*
# Commandes Doctrine
vendor/bin/doctrine-module orm:clear-cache:query
vendor/bin/doctrine-module orm:clear-cache:metadata
vendor/bin/doctrine-module orm:clear-cache:result
vendor/bin/doctrine-module orm:generate-proxies
#!/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}`
......@@ -3,16 +3,26 @@
namespace Demo;
return [
//
// ATTENTION: config Doctrine à déplacer dans `APP/config/autoload/`.
//
'doctrine' => [
'connection' => [
'orm_default' => [
'driverClass' => 'Doctrine\DBAL\Driver\PDOSqlite\Driver',
'driverClass' => \Doctrine\DBAL\Driver\PDOPgSql\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' => [
......
File deleted
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';
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment