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:
@@ -131,6 +131,20 @@ final class AdminFiltersApiTest extends AbstractApiTestCase
|
||||
}
|
||||
}
|
||||
|
||||
public function testRolesFilterByLabelIsCaseInsensitive(): void
|
||||
{
|
||||
// Garde explicite : la strategy est `ipartial` (ILIKE) et pas
|
||||
// `partial` (LIKE). Chercher "ad" en minuscules DOIT trouver
|
||||
// "Administrateur" (A majuscule). Si un futur dev retombe en
|
||||
// strategy `partial` par megarde, ce test cassera.
|
||||
$client = $this->authenticatedClient('admin', 'admin');
|
||||
$response = $client->request('GET', '/api/roles?label=ad');
|
||||
|
||||
$data = $response->toArray();
|
||||
$labels = array_column($data['member'], 'label');
|
||||
self::assertContains('Administrateur', $labels);
|
||||
}
|
||||
|
||||
public function testRolesFilterByCodePartial(): void
|
||||
{
|
||||
$client = $this->authenticatedClient('admin', 'admin');
|
||||
|
||||
Reference in New Issue
Block a user