fix(users) : guard anti-bypass sur sites null dans UserRbacProcessor
restoreAbsentCollections utilisait `array_key_exists('sites', $payload)`
qui retourne true pour une valeur null, sautant la restauration.
API Platform rejette deja `sites: null` au denormalize (400 type mismatch),
donc le bypass n'est pas reellement exploitable aujourd'hui via l'API HTTP.
Mais le test `&& is_array(...)` reste une defense-in-depth si la config
denormalizer change un jour, et rend l'intention explicite.
Test de regression : PATCH {sites: null} -> 400 + collection sites intacte
en DB (aucune trace de l'echec).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -250,7 +250,12 @@ final class UserRbacProcessor implements ProcessorInterface
|
||||
}
|
||||
|
||||
foreach (self::COLLECTION_MAP as $jsonKey => $accessors) {
|
||||
if (array_key_exists($jsonKey, $payload)) {
|
||||
// La garde ne doit sauter la restauration que si le payload fournit
|
||||
// un VRAI tableau pour cette cle. Un `null`, un scalaire ou un autre
|
||||
// type doivent etre traites comme "cle absente" : sinon un payload
|
||||
// `{"sites": null}` contourne la restauration et laisse API Platform
|
||||
// vider la collection silencieusement (bypass de la garde).
|
||||
if (array_key_exists($jsonKey, $payload) && is_array($payload[$jsonKey])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user