src/Controller/ApiLens/LensOverlayController.php line 42

Open in your IDE?
  1. <?php
  2. namespace App\Controller\ApiLens;
  3. use App\Entity\LensOverlay;
  4. use App\Entity\User;
  5. use App\Service\SerializeService;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. /**
  13.  * Class LensOverlayController
  14.  * @package App\Controller\ApiLens
  15.  * @Route(path="/api/lens/overlays", name="api_lens_overlays_")
  16.  * @IsGranted("ACCESS_LENS")
  17.  */
  18. class LensOverlayController extends AbstractController
  19. {
  20.     private EntityManagerInterface $em;
  21.     private SerializeService $serializeService;
  22.     public function __construct(
  23.         EntityManagerInterface $em,
  24.         SerializeService $serializeService,
  25.     ) {
  26.         $this->em $em;
  27.         $this->serializeService $serializeService;
  28.     }
  29.     /**
  30.      * Get all overlays accessible to the authenticated user
  31.      * Filters overlays based on user's access rights (isEmenu, isDistrimenu, isBkarte)
  32.      * 
  33.      * @param Request $request
  34.      * @return JsonResponse
  35.      * @Route("", name="list", methods={"GET"})
  36.      */
  37.     public function findAll(Request $request): JsonResponse
  38.     {
  39.         $baseUrl $request->getSchemeAndHttpHost();
  40.         
  41.         /** @var User|null $user */
  42.         $user $this->getUser();
  43.         
  44.         if (!$user) {
  45.             return new JsonResponse([
  46.                 'success' => false,
  47.                 'message' => 'Unauthorized',
  48.             ], 401);
  49.         }
  50.         // Get all active overlays
  51.         $allOverlays $this->em->getRepository(LensOverlay::class)->findBy([
  52.             'active' => true,
  53.         ], ['position' => 'ASC']);
  54.         $resultOverlays = [];
  55.         /** @var LensOverlay $overlay */
  56.         foreach ($allOverlays as $overlay) {
  57.             // Check if overlay is accessible to this user
  58.             if ($this->isOverlayAccessibleToUser($overlay$user)) {
  59.                 $resultOverlays[] = $this->serializeService->serializeLensOverlay($overlay$baseUrl);
  60.             }
  61.         }
  62.         return new JsonResponse([
  63.             'success' => true,
  64.             'overlays' => $resultOverlays,
  65.             'userAccess' => [
  66.                 'isEmenu' => $user->isEmenu(),
  67.                 'isDistrimenu' => $user->isDistrimenu(),
  68.                 'isBkarte' => $user->isBkarte(),
  69.             ],
  70.         ]);
  71.     }
  72.     /**
  73.      * Check if an overlay is accessible to a user based on their access rights
  74.      */
  75.     private function isOverlayAccessibleToUser(LensOverlay $overlayUser $user): bool
  76.     {
  77.         // If overlay is visible to all, grant access
  78.         if ($overlay->isVisibleForAll()) {
  79.             return true;
  80.         }
  81.         // Check restrictions
  82.         if ($overlay->isRestrictedToEmenu() && !$user->isEmenu()) {
  83.             return false;
  84.         }
  85.         if ($overlay->isRestrictedToDistrimenu() && !$user->isDistrimenu()) {
  86.             return false;
  87.         }
  88.         if ($overlay->isRestrictedToBkarte() && !$user->isBkarte()) {
  89.             return false;
  90.         }
  91.         return true;
  92.     }
  93. }