src/FMT/Application/Voter/AdminPanelVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace FMT\Application\Voter;
  3. use EasyCorp\Bundle\EasyAdminBundle\Dto\MenuItemDto;
  4. use EasyCorp\Bundle\EasyAdminBundle\Security\Permission;
  5. use FMT\Data\Entity\User;
  6. use FMT\Data\Enums\AdminPanelPermissions;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. class AdminPanelVoter extends Voter
  10. {
  11.     /**
  12.      * @param $permissionName
  13.      * @param $subject
  14.      * @return bool
  15.      */
  16.     protected function supports($permissionName$subject): bool
  17.     {
  18.         return Permission::exists($permissionName);
  19.     }
  20.     /**
  21.      * @param $permissionName
  22.      * @param $subject
  23.      * @param TokenInterface $token
  24.      * @return bool
  25.      */
  26.     protected function voteOnAttribute($permissionName$subjectTokenInterface $token): bool
  27.     {
  28.         if (Permission::EA_VIEW_MENU_ITEM === $permissionName) {
  29.             return $this->voteOnViewMenuItemPermission($subject$token);
  30.         }
  31.         return false;
  32.     }
  33.     /**
  34.      * @param MenuItemDto $menuItemDto
  35.      * @param TokenInterface $token
  36.      * @return bool
  37.      */
  38.     private function voteOnViewMenuItemPermission(MenuItemDto $menuItemDtoTokenInterface $token): bool
  39.     {
  40.         /** @var User $user */
  41.         $user $token->getUser();
  42.         if ($menuItemDto->getPermission() === AdminPanelPermissions::REPORT_VIEWER) {
  43.             return $user->hasRole(User::ROLE_MANAGER) || $user->hasRole(User::ROLE_SUPER_ADMIN);
  44.         }
  45.         if ($menuItemDto->getPermission() === AdminPanelPermissions::USER_SCHOOL_VIEWER) {
  46.             return $user->hasRole(User::ROLE_MANAGER) || $user->hasRole(User::ROLE_SUPER_ADMIN);
  47.         }
  48.         if ($menuItemDto->getPermission() === AdminPanelPermissions::EXTERNAL_USER_VIEWER) {
  49.             return $user->hasRole(User::ROLE_MANAGER) || $user->hasRole(User::ROLE_SUPER_ADMIN) || $user->hasRole(User::ROLE_SCHOOL_ADMIN);
  50.         }
  51.         if ($menuItemDto->getPermission() === AdminPanelPermissions::DONOR_USER_VIEWER) {
  52.             return $user->hasRole(User::ROLE_MANAGER) || $user->hasRole(User::ROLE_SUPER_ADMIN);
  53.         }
  54.         if ($menuItemDto->getPermission() === AdminPanelPermissions::STUDENT_USER_VIEWER) {
  55.             return $user->hasRole(User::ROLE_MANAGER) || $user->hasRole(User::ROLE_SUPER_ADMIN) || $user->hasRole(User::ROLE_SCHOOL_ADMIN);
  56.         }
  57.         return false;
  58.     }
  59. }