src/Security/Voter/DatabaseVoter.php line 15

  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\Administrator;
  4. use App\Entity\AdministratorGroup;
  5. use App\Entity\AdministratorPermission;
  6. use App\Entity\PortalAdministrator;
  7. use App\Entity\PortalAdministratorPermission;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  10. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  11. use Symfony\Component\Security\Core\User\UserInterface;
  12. class DatabaseVoter extends Voter
  13. {
  14.     public const EDIT 'POST_EDIT';
  15.     public const VIEW 'POST_VIEW';
  16.     public function __construct(public EntityManagerInterface $manager)
  17.     {
  18.     }
  19.     protected function supports(string $attribute$subject): bool
  20.     {
  21.         return true;
  22.     }
  23.     protected function voteOnAttribute(string $attributemixed $subjectTokenInterface $token,): bool
  24.     {
  25.         $user $token->getUser();
  26.         // if the user is anonymous, do not grant access
  27.         if (!$user instanceof UserInterface) {
  28.             return false;
  29.         }
  30.         if ($attribute == 'ROLE_ADMIN') {
  31.             if (in_array('ROLE_ADMIN'$user->getRoles())) {
  32.                 return true;
  33.             } else {
  34.                 return false;
  35.             }
  36.         }
  37.         if ($attribute == 'ROLE_PORTAL_ADMIN') {
  38.             if (in_array('ROLE_PORTAL_ADMIN'$user->getRoles())) {
  39.                 return true;
  40.             } else {
  41.                 return false;
  42.             }
  43.         }
  44.         /** @var Administrator $user */
  45.         if ($user instanceof Administrator) {
  46.             foreach ($user->getAdministratorGroups() as $userGroup) {
  47.                 if ($userGroup->getName() === 'SuperAdmin') {
  48.                     return true;
  49.                 }
  50.                 /** @var AdministratorPermission $permission */
  51.                 $permission $this->manager->getRepository(AdministratorPermission::class)->findOneBy(
  52.                     [
  53.                         'name' => $attribute,
  54.                     ]
  55.                 );
  56.                 if ($permission) {
  57.                     foreach ($permission->getAdmnistratorGroup() as $value) {
  58.                         if ($value === $userGroup) {
  59.                             return true;
  60.                         }
  61.                     }
  62.                 }
  63.             }
  64.         }
  65.         /** @var PortalAdministrator $user */
  66.         if ($user instanceof PortalAdministrator) {
  67.             foreach ($user->getPortalAdministratorGroups() as $userGroup) {
  68.                 if ($userGroup->getName() === 'SuperAdmin') {
  69.                     return true;
  70.                 }
  71.                 /** @var PortalAdministratorPermission $permission */
  72.                 $permission $this->manager->getRepository(PortalAdministratorPermission::class)->findOneBy(
  73.                     [
  74.                         'name' => $attribute,
  75.                     ]
  76.                 );
  77.                 if ($permission) {
  78.                     foreach ($permission->getPortalAdministratorGroup() as $value) {
  79.                         if ($value === $userGroup) {
  80.                             return true;
  81.                         }
  82.                     }
  83.                 }
  84.             }
  85.         }
  86.         return false;
  87.     }
  88. }