src/Security/Voter/PermissionVoter.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\Role;
  4. use App\Entity\User;
  5. use App\Enum\PermissionEnum;
  6. use App\Service\UserPermissionLookup;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. use Symfony\Component\Security\Core\User\UserInterface;
  10. class PermissionVoter extends Voter
  11. {
  12.     /**
  13.      * @var UserPermissionLookup
  14.      */
  15.     private $userPermissionLookup;
  16.     public function __construct(UserPermissionLookup $userPermissionLookup)
  17.     {
  18.         $this->userPermissionLookup $userPermissionLookup;
  19.     }
  20.     protected function supports($attribute$subject)
  21.     {
  22.         $permissions = [
  23.             PermissionEnum::ROLE_CREATE,
  24.             PermissionEnum::ROLE_EDIT,
  25.             PermissionEnum::ROLE_DELETE,
  26.             PermissionEnum::ROLE_VIEW,
  27.         ];
  28.         if (!\in_array($attribute$permissionstrue)) {
  29.             return false;
  30.         }
  31.         if (!$subject instanceof Role) {
  32.             return false;
  33.         }
  34.         return true;
  35.     }
  36.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  37.     {
  38.         /** @var User $user */
  39.         $user $token->getUser();
  40.         if (!$user instanceof UserInterface) {
  41.             return false;
  42.         }
  43.         switch ($attribute) {
  44.             case PermissionEnum::ROLE_EDIT:
  45.                 return $this->canEdit($subject$user);
  46.                 break;
  47.             case PermissionEnum::ROLE_VIEW:
  48.                 return $this->canView($subject$user);
  49.                 break;
  50.             case  PermissionEnum::ROLE_CREATE:
  51.                 return $this->canCreate($subject$user);
  52.                 break;
  53.             case  PermissionEnum::ROLE_DELETE:
  54.                 return $this->canDelete($subject$user);
  55.                 break;
  56.         }
  57.         return false;
  58.     }
  59.     private function canView(Role $roleUser $user)
  60.     {
  61.         $permissions $this->userPermissionLookup->findAllByUser($user);
  62.         if (\in_array(PermissionEnum::ROLE_VIEW$permissionstrue)) {
  63.             return true;
  64.         }
  65.         return false;
  66.     }
  67.     private function canEdit(Role $roleUser $user)
  68.     {
  69.         $permissions $this->userPermissionLookup->findAllByUser($user);
  70.         if (\in_array(PermissionEnum::ROLE_EDIT$permissionstrue)) {
  71.             return true;
  72.         }
  73.         return false;
  74.     }
  75.     private function canCreate(Role $roleUser $user)
  76.     {
  77.         $permissions $this->userPermissionLookup->findAllByUser($user);
  78.         if (\in_array(PermissionEnum::ROLE_CREATE$permissionstrue)) {
  79.             return true;
  80.         }
  81.         return false;
  82.     }
  83.     private function canDelete(Role $roleUser $user)
  84.     {
  85.         $permissions $this->userPermissionLookup->findAllByUser($user);
  86.         if (\in_array(PermissionEnum::ROLE_DELETE$permissionstrue)) {
  87.             return true;
  88.         }
  89.         return false;
  90.     }
  91. }