fix(review) : applique fixes blockers review PR #9 (permission guard, sites LAZY, audit UI stale)
- Permission entity : remplace le guard `ROLE_USER` par `core.permissions.view` sur GetCollection/Get. Le catalogue complet des permissions RBAC etait accessible a tout utilisateur authentifie. Ajoute la permission manquante dans CoreModule::permissions() et inverse les tests standardUser* (attendent maintenant un 403 pour un user sans la permission). - UserRbacProcessor::restoreAbsentCollections() : force PersistentCollection::initialize() avant de lire le snapshot. Pour une association fetch=LAZY (ex: User::$sites), le snapshot est vide tant que la collection n'est pas materialisee, ce qui faisait vider silencieusement tous les sites d'un user sur un PATCH ne contenant pas la cle `sites`. - admin/audit-log.vue : ajoute un catch sur loadEntries() qui reset entries/totalItems pour ne pas afficher de donnees stale si le fetch echoue (reseau coupe, 403 inopinee...). Le toast d'erreur reste gere par useApi. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -166,16 +166,19 @@ final class PermissionApiTest extends AbstractApiTestCase
|
||||
self::assertResponseStatusCodeSame(401);
|
||||
}
|
||||
|
||||
public function testStandardUserCanListPermissions(): void
|
||||
public function testStandardUserWithoutPermissionIsForbiddenOnCollection(): void
|
||||
{
|
||||
// Le catalogue de permissions est accessible a tout utilisateur authentifie.
|
||||
// Le catalogue de permissions est protege par `core.permissions.view` :
|
||||
// un user authentifie sans cette permission (ni flag admin) doit
|
||||
// recevoir un 403. Alice n'a que le role systeme "user" (zero
|
||||
// permission attachee) — elle est le cobaye ideal pour ce test.
|
||||
$client = $this->authenticatedClient('alice', 'alice');
|
||||
$client->request('GET', '/api/permissions');
|
||||
|
||||
self::assertResponseIsSuccessful();
|
||||
self::assertResponseStatusCodeSame(403);
|
||||
}
|
||||
|
||||
public function testStandardUserCanGetPermission(): void
|
||||
public function testStandardUserWithoutPermissionIsForbiddenOnItem(): void
|
||||
{
|
||||
$permission = $this->getEm()->getRepository(Permission::class)
|
||||
->findOneBy(['code' => 'test.core.users.view'])
|
||||
@@ -185,7 +188,7 @@ final class PermissionApiTest extends AbstractApiTestCase
|
||||
$client = $this->authenticatedClient('alice', 'alice');
|
||||
$client->request('GET', '/api/permissions/'.$permission->getId());
|
||||
|
||||
self::assertResponseIsSuccessful();
|
||||
self::assertResponseStatusCodeSame(403);
|
||||
}
|
||||
|
||||
private function cleanupTestPermissions(): void
|
||||
|
||||
Reference in New Issue
Block a user