fix(admin) : recherche insensible a la casse + label permissions dans filtres
SearchFilter partial etait case-sensitive en PostgreSQL : taper "ad" ne
trouvait pas "Administrateur". Passage en strategy `ipartial` (ILIKE) sur
tous les champs texte filtrables :
- Role.label / Role.code
- Site.name / Site.city / Site.postalCode
- User.username
Les filtres exacts sur relations (rbacRoles.code, sites.name,
permissions.code) restent en `exact` — alimentes par des <select> donc
casse maitrisee.
Test de non-regression ajoute : chercher "ad" (minuscule) trouve bien
"Administrateur" (A majuscule) sur /api/roles?label=ad.
UI select permissions du filtre /admin/roles : affiche `perm.label`
("Gerer les roles et permissions") au lieu de `perm.code`
("core.roles.manage"). Value reste sur `code` pour le backend. Tri
par label pour coherence alphabetique avec l'affichage.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -64,13 +64,14 @@ use Symfony\Component\Serializer\Attribute\SerializedName;
|
||||
],
|
||||
denormalizationContext: ['groups' => ['user:write']],
|
||||
)]
|
||||
// Filtres /admin/users : recherche partielle sur username + filtre bool
|
||||
// isAdmin + filtres exacts sur les relations (code de role ou nom de site).
|
||||
// Filtres /admin/users : recherche partielle insensible a la casse
|
||||
// (ILIKE) sur username + filtre bool isAdmin + filtres exacts sur les
|
||||
// relations (code de role ou nom de site).
|
||||
// Les relations sont filtrees par jointure : `rbacRoles.code=admin` declenche
|
||||
// un INNER JOIN user_role → role. `sites.name=Chatellerault` declenche
|
||||
// INNER JOIN user_site → site.
|
||||
#[ApiFilter(SearchFilter::class, properties: [
|
||||
'username' => 'partial',
|
||||
'username' => 'ipartial',
|
||||
'rbacRoles.code' => 'exact',
|
||||
'sites.name' => 'exact',
|
||||
])]
|
||||
|
||||
Reference in New Issue
Block a user