Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
## Résumé
Implémentation complète du système RBAC (Role-Based Access Control) pour Coltura.
### Backend
- Entités Permission et Role avec API Platform CRUD
- PermissionVoter : vérification des permissions effectives (rôles + directes), admin bypass
- Endpoints `PATCH /users/{id}/rbac` pour assigner rôles, permissions directes et isAdmin
- AdminHeadcountGuard : protection contre la suppression du dernier admin
- Commande `app:sync-permissions` pour synchroniser les permissions déclarées par les modules
- Filtrage sidebar par permission RBAC (`permission` key optionnelle dans sidebar.php)
- 115 tests PHPUnit (fonctionnels + unitaires)
### Frontend
- Composable `usePermissions()` avec `can()`, `canAny()`, `canAll()` et admin bypass
- Page `/admin/roles` : DataTable, création/édition via drawer, suppression avec confirmation
- Page `/admin/users` : DataTable, drawer RBAC avec rôles, permissions directes, résumé effectif
- PermissionGroup : checkboxes groupées par module avec "tout sélectionner"
- EffectivePermissions : résumé lecture seule avec badges source ("via Rôle X" / "Direct")
- Warning auto-édition, toggle isAdmin
- Tests Vitest pour usePermissions
### Permissions déclarées
- `core.users.view` — Voir les utilisateurs
- `core.users.manage` — Gérer les utilisateurs
- `core.roles.view` — Voir les rôles RBAC
- `core.roles.manage` — Gérer les rôles et permissions
- `GET /api/permissions` accessible à tout utilisateur authentifié (catalogue read-only)
## Tickets Lesstime
- ERP-23 (#343) — Entités Permission et Role
- ERP-24 (#344) — API CRUD Roles & Permissions
- ERP-25 (#345) — Voter Symfony + usePermissions
- ERP-26 (#346) — Interface Admin : Gestion des Rôles
- ERP-27 (#347) — Interface Admin : Permissions Utilisateur
## Test plan
- [ ] `make db-reset` puis vérifier les fixtures (admin/alice/bob, rôles système)
- [ ] Login admin : sidebar affiche Gestion des rôles + Utilisateurs
- [ ] Login alice : sidebar masque ces onglets (pas de permission)
- [ ] Page /admin/roles : CRUD rôles, permissions groupées, protection rôles système
- [ ] Page /admin/users : assignation rôles + permissions directes, résumé effectif
- [ ] Warning auto-édition quand admin modifie ses propres droits
- [ ] `make test` : 115 tests PHPUnit passent
- [ ] `cd frontend && npm run test` : tests Vitest passent
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Matthieu <mtholot19@gmail.com>
Co-authored-by: tristan <tristan@yuno.malio.fr>
Reviewed-on: MALIO-DEV/Coltura#7
Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-committed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
125 lines
4.1 KiB
JSON
125 lines
4.1 KiB
JSON
{
|
|
"common": {
|
|
"loading": "Chargement...",
|
|
"save": "Enregistrer",
|
|
"cancel": "Annuler",
|
|
"delete": "Supprimer",
|
|
"edit": "Modifier",
|
|
"create": "Creer",
|
|
"search": "Rechercher",
|
|
"confirm": "Confirmer",
|
|
"yes": "Oui",
|
|
"no": "Non",
|
|
"actions": "Actions"
|
|
},
|
|
"sidebar": {
|
|
"general": {
|
|
"section": "Général",
|
|
"dashboard": "Tableau de bord",
|
|
"admin": "Administration",
|
|
"logout": "Déconnexion"
|
|
},
|
|
"commercial": {
|
|
"section": "Commercial",
|
|
"suppliers": "Répertoire fournisseurs"
|
|
},
|
|
"core": {
|
|
"roles": "Gestion des rôles",
|
|
"users": "Utilisateurs"
|
|
}
|
|
},
|
|
"dashboard": {
|
|
"title": "Tableau de bord",
|
|
"welcome": "Bienvenue sur Coltura"
|
|
},
|
|
"commercial": {
|
|
"title": "Commercial",
|
|
"welcome": "Module Commercial"
|
|
},
|
|
"auth": {
|
|
"login": "Connexion",
|
|
"logout": "Deconnexion",
|
|
"username": "Nom d'utilisateur",
|
|
"password": "Mot de passe"
|
|
},
|
|
"errors": {
|
|
"auth": {
|
|
"login": "Identifiants invalides",
|
|
"session": "Session expirée",
|
|
"logout": "Erreur lors de la deconnexion"
|
|
},
|
|
"http": {
|
|
"get": "Erreur lors du chargement",
|
|
"post": "Erreur lors de la creation",
|
|
"put": "Erreur lors de la mise a jour",
|
|
"patch": "Erreur lors de la modification",
|
|
"delete": "Erreur lors de la suppression"
|
|
}
|
|
},
|
|
"success": {
|
|
"auth": {
|
|
"logout": "Deconnexion reussie"
|
|
}
|
|
},
|
|
"admin": {
|
|
"roles": {
|
|
"title": "Gestion des rôles",
|
|
"newRole": "Nouveau rôle",
|
|
"editRole": "Modifier le rôle",
|
|
"createRole": "Créer un rôle",
|
|
"noRoles": "Aucun rôle configuré",
|
|
"table": {
|
|
"label": "Libellé",
|
|
"code": "Code",
|
|
"permissions": "Permissions",
|
|
"system": "Système"
|
|
},
|
|
"form": {
|
|
"label": "Libellé",
|
|
"code": "Code",
|
|
"description": "Description",
|
|
"permissions": "Permissions"
|
|
},
|
|
"delete": {
|
|
"title": "Supprimer le rôle",
|
|
"message": "Êtes-vous sûr de vouloir supprimer le rôle \"{label}\" ? Cette action est irréversible.",
|
|
"systemTooltip": "Rôle système non supprimable"
|
|
},
|
|
"toast": {
|
|
"created": "Rôle créé avec succès",
|
|
"updated": "Rôle mis à jour avec succès",
|
|
"deleted": "Rôle supprimé avec succès"
|
|
},
|
|
"permissions": {
|
|
"selectAll": "Tout selectionner",
|
|
"noPermissions": "Aucune permission disponible"
|
|
}
|
|
},
|
|
"users": {
|
|
"title": "Gestion des utilisateurs",
|
|
"noUsers": "Aucun utilisateur",
|
|
"table": {
|
|
"username": "Nom d'utilisateur",
|
|
"admin": "Administrateur",
|
|
"roles": "Roles",
|
|
"directPermissions": "Permissions directes"
|
|
},
|
|
"drawer": {
|
|
"title": "Permissions de {username}",
|
|
"selfWarning": "Vous modifiez vos propres droits",
|
|
"adminToggle": "Administrateur (bypass total)",
|
|
"rolesSection": "Rôles",
|
|
"directPermissionsSection": "Permissions directes",
|
|
"summarySection": "Résumé des permissions effectives",
|
|
"noEffectivePermissions": "Aucune permission effective",
|
|
"sourceRole": "via {role}",
|
|
"sourceDirect": "Direct",
|
|
"lastAdminWarning": "Impossible de retirer le statut administrateur du dernier admin"
|
|
},
|
|
"toast": {
|
|
"updated": "Permissions mises à jour avec succès"
|
|
}
|
|
}
|
|
}
|
|
}
|