feat(core) : gate sidebar by effective permissions
This commit is contained in:
@@ -6,6 +6,7 @@ namespace App\Shared\Infrastructure\ApiPlatform\State;
|
||||
|
||||
use ApiPlatform\Metadata\Operation;
|
||||
use ApiPlatform\State\ProviderInterface;
|
||||
use App\Shared\Domain\Contract\UserInterface;
|
||||
use App\Shared\Domain\Module\ModuleRegistry;
|
||||
use App\Shared\Domain\Sidebar\SidebarFilter;
|
||||
use App\Shared\Infrastructure\ApiPlatform\Resource\SidebarResource;
|
||||
@@ -31,7 +32,15 @@ final readonly class SidebarProvider implements ProviderInterface
|
||||
$user = $this->security->getUser();
|
||||
$roles = null !== $user ? $user->getRoles() : [];
|
||||
|
||||
$filtered = SidebarFilter::filter($sidebar, ModuleRegistry::ids($moduleClasses), array_values($roles));
|
||||
// RBAC fin : permissions effectives du contrat. ROLE_ADMIN bypasse tout (Décision 1) :
|
||||
// on lui injecte le catalogue complet des permissions déclarées pour satisfaire les gates.
|
||||
if (in_array('ROLE_ADMIN', $roles, true)) {
|
||||
$permissions = array_column(ModuleRegistry::permissions($moduleClasses), 'code');
|
||||
} else {
|
||||
$permissions = $user instanceof UserInterface ? $user->getEffectivePermissions() : [];
|
||||
}
|
||||
|
||||
$filtered = SidebarFilter::filter($sidebar, ModuleRegistry::ids($moduleClasses), array_values($roles), $permissions);
|
||||
|
||||
$dto = new SidebarResource();
|
||||
$dto->sections = $filtered['sections'];
|
||||
|
||||
Reference in New Issue
Block a user