diff --git a/CLAUDE.md b/CLAUDE.md index 5e7f8d2..f1a7143 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -126,6 +126,12 @@ La librairie `@malio/layer-ui` fournit les composants de formulaire et d'action. - Config Docker : `infra/dev/.env.docker` (override local : `infra/dev/.env.docker.local`) - Après modif nginx : `docker restart nginx-lesstime` +## Déploiement (prod Docker) + +- Script : `infra/prod/deploy.sh` (`./deploy.sh [tag]`) — doc complète : `doc/deployment-docker.md` +- Étapes : maintenance → pull image → up → migrations → **`app:seed-rbac`** → **`app:sync-permissions`** → cache clear/warmup +- **RBAC** : les migrations créent les tables `role`/`permission` mais **n'insèrent aucune donnée**. Les rôles système (`admin`, `user`) viennent de `app:seed-rbac` (idempotent) et le catalogue des permissions de `app:sync-permissions` (à relancer à chaque ajout de permission). Symptôme si oubliées : page admin Rôles vide (« Aucun rôle trouvé »). + ## Fixtures - User admin : `admin` / `admin` (ROLE_ADMIN) diff --git a/doc/deployment-docker.md b/doc/deployment-docker.md index 2dbb342..ff97b98 100644 --- a/doc/deployment-docker.md +++ b/doc/deployment-docker.md @@ -128,6 +128,12 @@ sudo docker compose cp app:/var/www/html/public/maintenance.html public/maintena echo "==> Running migrations..." sudo docker compose exec -T -u www-data app php bin/console doctrine:migrations:migrate --no-interaction +echo "==> Seeding RBAC system roles (idempotent)..." +sudo docker compose exec -T -u www-data app php bin/console app:seed-rbac + +echo "==> Syncing RBAC permissions catalog..." +sudo docker compose exec -T -u www-data app php bin/console app:sync-permissions + echo "==> Clearing cache..." sudo docker compose exec -T -u www-data app php bin/console cache:clear --env=prod sudo docker compose exec -T -u www-data app php bin/console cache:warmup --env=prod @@ -294,7 +300,31 @@ cd /var/www/lesstime ./deploy.sh v0.3.13 # deploie une version specifique ``` -C'est tout. Le script pull l'image, redemarre le conteneur, lance les migrations et vide le cache. +C'est tout. Le script pull l'image, redemarre le conteneur, lance les migrations, seed les roles +systeme RBAC, synchronise le catalogue des permissions et vide le cache. + +--- + +## RBAC : roles & permissions (post-deploiement) + +Le module RBAC (entites `Role` / `Permission`) repose sur des donnees qui ne sont **pas** +inserees par les migrations (celles-ci creent uniquement les tables). Deux commandes idempotentes +les peuplent, integrees au `deploy.sh` : + +| Commande | Effet | +|----------|-------| +| `app:seed-rbac` | Cree les **roles systeme** `admin` (Administrateur) et `user` (Utilisateur). Idempotent : ne recree rien si deja present. | +| `app:sync-permissions` | (Re)synchronise le **catalogue des permissions** a partir des modules actifs. A relancer a chaque ajout de permission dans le code. | + +Symptome si elles n'ont pas tourne : la page d'admin **Roles** affiche « Aucun role trouve ». + +Correctif manuel sur une prod deja deployee (sans relancer un deploiement complet) : + +```bash +cd /var/www/lesstime +sudo docker compose exec -T -u www-data app php bin/console app:seed-rbac +sudo docker compose exec -T -u www-data app php bin/console app:sync-permissions +``` --- diff --git a/infra/prod/deploy.sh b/infra/prod/deploy.sh index 1027034..a4ab798 100755 --- a/infra/prod/deploy.sh +++ b/infra/prod/deploy.sh @@ -27,6 +27,9 @@ sudo docker compose cp app:/var/www/html/public/maintenance.html public/maintena echo "==> Running migrations..." sudo docker compose exec -T -u www-data app php bin/console doctrine:migrations:migrate --no-interaction +echo "==> Seeding RBAC system roles (idempotent)..." +sudo docker compose exec -T -u www-data app php bin/console app:seed-rbac + echo "==> Syncing RBAC permissions catalog..." sudo docker compose exec -T -u www-data app php bin/console app:sync-permissions