- PermissionRepositoryInterface avec findByCode et findAllCodes (pour le sync
command et le futur PermissionVoter)
- RoleRepositoryInterface avec findByCode
- Implementations Doctrine alignees sur DoctrineUserRepository
- Alias DI dans config/services.yaml
- Rebranchement de repositoryClass sur les entites Permission et Role
Ticket #343 - 2/7 : couche persistence RBAC.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Permission : guards constructeur (code/label/module non vides, code avec point)
- Permission::revive() reutilise updateMetadata() pour eviter la duplication
- Suppression de SystemRolesTest (tautologique, ne capture aucun comportement)
- Role::permissions : commentaire explicite sur la raison du fetch EAGER
- Alignement des types de retour sur static (style User.php)
- Nouveau test Role::addPermission avec permissions distinctes
Ticket #343 - Task 1 polish (revue qualite).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Entite Permission avec methodes markOrphan/revive/updateMetadata
- Entite Role avec addPermission/removePermission/ensureDeletable
- Constantes SystemRoles (codes admin/user partages)
- Exception SystemRoleDeletionException pour la garde de suppression
- Tests unitaires couvrant le comportement domaine (pas de BDD)
Ticket #343 - 1/7 : fondations RBAC (domaine pur, sans persistence).
Les entites ne portent pas encore repositoryClass (ajoute en Task 2).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Spec detaillee des fondations RBAC backend (entites Role/Permission, sync
command, migration, fixtures, tests) dans docs/rbac/ticket-343-spec.md
- Ajout CLAUDE.md des regles projet : commentaires francais (PHP + TS/Vue)
et convention de nommage des permissions module.resource[.sub].action
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Persist var/log/ via named volume coltura_logs so logs survive
container restarts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add ESLint with @nuxt/eslint-config enforcing 4-space indentation.
Add make nuxt-lint and nuxt-lint-fix targets.
Add ESLint check to pre-commit hook (lint only, no auto-fix).
Fix auth.vue indentation from 2 to 4 spaces.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Change UserOutput.id from int to ?int to match User::getId() return type.
Replace EntityManagerInterface with UserRepositoryInterface in CreateUserCommand.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add resetSidebar() to useSidebar composable and call it on logout
to prevent stale sidebar data after re-login.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update CLAUDE.md to reflect actual ports (PG 5437, frontend 3004).
Fix CHANGELOG.md header from "Ferme" to "Coltura".
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Maintenance is handled by nginx-proxy on the host, not inside the
container. deploy.sh extracts maintenance.html from the container.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Single container with supervisord (Nginx + PHP-FPM), 3-stage
Dockerfile build, pre-built image from registry, port 8086.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Without APP_ENV=prod, Symfony defaults to dev and tries to load
DoctrineFixturesBundle which is excluded by --no-dev.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- tailwind.config.ts: full theme with primary/secondary/tertiary + m-* CSS vars
- infra/prod/maintenance.html: maintenance page
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>