src/Security/Voter/UserVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\User;
  4. use App\Enum\PermissionEnum;
  5. use App\Service\UserPermissionLookup;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. class UserVoter extends Voter
  10. {
  11.     /**
  12.      * @var UserPermissionLookup
  13.      */
  14.     private $userPermissionLookup;
  15.     public function __construct(UserPermissionLookup $userPermissionLookup)
  16.     {
  17.         $this->userPermissionLookup $userPermissionLookup;
  18.     }
  19.     protected function supports($attribute$subject)
  20.     {
  21.         $arrayPermissions = [
  22.             PermissionEnum::EMPLOYEE_VIEW,
  23.             PermissionEnum::EMPLOYEE_EDIT,
  24.             PermissionEnum::EMPLOYEE_CREATE,
  25.             PermissionEnum::EMPLOYEE_DELETE,
  26.             PermissionEnum::CUSTOMER_VIEW,
  27.             PermissionEnum::CUSTOMER_EDIT,
  28.             PermissionEnum::CUSTOMER_CREATE,
  29.             PermissionEnum::CUSTOMER_DELETE,
  30.             PermissionEnum::CUSTOMER_LANDING_PAGE,
  31.             PermissionEnum::ASSIGNMENT_FINISH,
  32.             PermissionEnum::DOWNLOAD_FILE,
  33.             PermissionEnum::DASHBOARD_VIEW_ADMIN,
  34.             PermissionEnum::CUSTOMER_ALLOW_DELIVERY,
  35.             ];
  36.         if (!\in_array($attribute$arrayPermissionstrue)) {
  37.             return false;
  38.         }
  39.         if (!$subject instanceof User) {
  40.             return false;
  41.         }
  42.         return true;
  43.     }
  44.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  45.     {
  46.         /** @var User $user */
  47.         $user $token->getUser();
  48.         if (!$user instanceof UserInterface) {
  49.             return false;
  50.         }
  51.         switch ($attribute) {
  52.             case PermissionEnum::EMPLOYEE_EDIT:
  53.                 return $this->employeeCanEdit($user);
  54.             case PermissionEnum::EMPLOYEE_VIEW:
  55.                 return $this->employeeCanView($user);
  56.             case  PermissionEnum::EMPLOYEE_CREATE:
  57.                 return $this->employeeCanCreate($user);
  58.             case  PermissionEnum::EMPLOYEE_DELETE:
  59.                 return $this->employeeCanDelete($user);
  60.             case PermissionEnum::CUSTOMER_EDIT:
  61.                 return $this->customerCanEdit($user);
  62.             case  PermissionEnum::CUSTOMER_CREATE:
  63.                 return $this->customerCanCreate($user);
  64.             case  PermissionEnum::CUSTOMER_DELETE:
  65.                 return $this->customerCanDelete($user);
  66.             case  PermissionEnum::CUSTOMER_VIEW:
  67.                 return $this->customerCanView($user);
  68.             case PermissionEnum::ASSIGNMENT_FINISH:
  69.                 return $this->canViewFinishAssignment($user);
  70.             case PermissionEnum::CUSTOMER_LANDING_PAGE:
  71.                 return $this->customerLandingPageCanView($user);
  72.             case PermissionEnum::DOWNLOAD_FILE:
  73.                 return $this->canViewDownloadFile($user);
  74.             case PermissionEnum::DASHBOARD_VIEW_ADMIN:
  75.                 return $this->canViewDashBoardAdmin($user);
  76.              case PermissionEnum::CUSTOMER_ALLOW_DELIVERY:
  77.                 return $this->canAllowDelivery($user);
  78.         }
  79.         return false;
  80.     }
  81.     private function canViewDashBoardAdmin(User $user): bool
  82.     {
  83.         $permissions $this->userPermissionLookup->findAllByUser($user);
  84.         if (\in_array(PermissionEnum::DASHBOARD_VIEW_ADMIN$permissionstrue)) {
  85.             return true;
  86.         }
  87.         return false;
  88.     }
  89.     private function customerCanView(User $user): bool
  90.     {
  91.         $permissions $this->userPermissionLookup->findAllByUser($user);
  92.         if (\in_array(PermissionEnum::CUSTOMER_VIEW$permissionstrue)) {
  93.             return true;
  94.         }
  95.         return false;
  96.     }
  97.     private function customerCanEdit(User $user): bool
  98.     {
  99.         $permissions $this->userPermissionLookup->findAllByUser($user);
  100.         if (\in_array(PermissionEnum::CUSTOMER_EDIT$permissionstrue)) {
  101.             return true;
  102.         }
  103.         return false;
  104.     }
  105.     private function customerCanCreate(User $user): bool
  106.     {
  107.         $permissions $this->userPermissionLookup->findAllByUser($user);
  108.         if (\in_array(PermissionEnum::CUSTOMER_CREATE$permissionstrue)) {
  109.             return true;
  110.         }
  111.         return false;
  112.     }
  113.     private function customerCanDelete(User $user): bool
  114.     {
  115.         $permissions $this->userPermissionLookup->findAllByUser($user);
  116.         if (\in_array(PermissionEnum::CUSTOMER_DELETE$permissionstrue)) {
  117.             return true;
  118.         }
  119.         return false;
  120.     }
  121.     private function employeeCanView(User $user): bool
  122.     {
  123.         $permissions $this->userPermissionLookup->findAllByUser($user);
  124.         if (\in_array(PermissionEnum::EMPLOYEE_VIEW$permissionstrue)) {
  125.             return true;
  126.         }
  127.         return false;
  128.     }
  129.     private function employeeCanEdit(User $user): bool
  130.     {
  131.         $permissions $this->userPermissionLookup->findAllByUser($user);
  132.         if (\in_array(PermissionEnum::EMPLOYEE_EDIT$permissionstrue)) {
  133.             return true;
  134.         }
  135.         return false;
  136.     }
  137.     private function employeeCanCreate(User $user): bool
  138.     {
  139.         $permissions $this->userPermissionLookup->findAllByUser($user);
  140.         if (\in_array(PermissionEnum::EMPLOYEE_CREATE$permissionstrue)) {
  141.             return true;
  142.         }
  143.         return false;
  144.     }
  145.     private function employeeCanDelete(User $user): bool
  146.     {
  147.         $permissions $this->userPermissionLookup->findAllByUser($user);
  148.         if (\in_array(PermissionEnum::EMPLOYEE_DELETE$permissionstrue)) {
  149.             return true;
  150.         }
  151.         return false;
  152.     }
  153.     private function canViewFinishAssignment(User $user): bool
  154.     {
  155.         $permissions $this->userPermissionLookup->findAllByUser($user);
  156.         if (\in_array(PermissionEnum::ASSIGNMENT_FINISH$permissionstrue)) {
  157.             return true;
  158.         }
  159.         return false;
  160.     }
  161.     private function customerLandingPageCanView(User $user): bool
  162.     {
  163.         $permissions $this->userPermissionLookup->findAllByUser($user);
  164.         if (\in_array(PermissionEnum::CUSTOMER_LANDING_PAGE$permissionstrue)) {
  165.             return true;
  166.         }
  167.         return false;
  168.     }
  169.     private function canViewDownloadFile(User $user): bool
  170.     {
  171.         $permissions $this->userPermissionLookup->findAllByUser($user);
  172.         if (\in_array(PermissionEnum::DOWNLOAD_FILE$permissionstrue)) {
  173.             return true;
  174.         }
  175.         return false;
  176.     }
  177.      private function canAllowDelivery(User $user): bool
  178.     {
  179.         $permissions $this->userPermissionLookup->findAllByUser($user);
  180.         if (\in_array(PermissionEnum::CUSTOMER_ALLOW_DELIVERY$permissionstrue)) {
  181.             return true;
  182.         }
  183.         return false;
  184.     }
  185. }