src/Security/EntityVoter.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Annotations\HasPermission;
  4. use App\Annotations\PermissionKey;
  5. use App\Entity\Menu;
  6. use App\Entity\Security\Permission;
  7. use App\Entity\User\User;
  8. use App\Manager\User\PermissionManager;
  9. use Doctrine\Common\Annotations\Reader;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\HttpFoundation\RequestStack;
  12. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  13. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  14. use Symfony\Component\Security\Core\Security;
  15. class EntityVoter extends Voter
  16. {
  17.     private RequestStack $requestStack;
  18.     private PermissionManager $manager;
  19.     public function __construct(RequestStack $requestStackPermissionManager $manager)
  20.     {
  21.         $this->requestStack $requestStack;
  22.         $this->manager $manager;
  23.     }
  24.     /**
  25.      * @inheritDoc
  26.      */
  27.     protected function supports($attribute$subject): bool
  28.     {
  29.         // We check permission for all routes
  30.         return true;
  31.     }
  32.     /**
  33.      * @inheritDoc
  34.      */
  35.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  36.     {
  37.         /** @var User $user */
  38.         $user $token->getUser();
  39.         if (!$user instanceof User)
  40.         {
  41.             return false;
  42.         }
  43.         try {
  44.             $method = new \ReflectionMethod($this->requestStack->getCurrentRequest()->get('_controller'));
  45.         } catch (\ReflectionException $e) {
  46.             return false;
  47.         }
  48.         return $this->manager->hasPermission(null$method);
  49.     }
  50. }