src/Security/Voter/LessonVoter.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\DBAL\Types\RoleEnumType;
  4. use App\Entity\Lesson;
  5. use App\Service\LessonAvailabilityCheckerService;
  6. use App\Service\LessonWasReadBtnCheckerService;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. use Symfony\Component\Security\Core\Security;
  10. class LessonVoter extends Voter
  11. {
  12.     const VIEW 'view';
  13.     const VIEW_WAS_READ_BTN 'view_was_read_btn';
  14.     const ADMIN_EDIT_MAIN 'admin_edit_main';
  15.     const ADMIN_ADD_HOMEWORK 'admin_add_homework';
  16.     const ADMIN_EDIT_HOMEWORK 'admin_edit_homework';
  17.     const ADMIN_EDIT_ADDITINAL_LESSON_INFO 'admin_edit_additinal_lesson_info';
  18.     private $checkerService;
  19.     private $btnCheckerService;
  20.     private Security $security;
  21.     public function __construct(
  22.         LessonAvailabilityCheckerService $checkerService,
  23.         LessonWasReadBtnCheckerService $btnCheckerService,
  24.         Security $security
  25.     ) {
  26.         $this->checkerService    $checkerService;
  27.         $this->btnCheckerService $btnCheckerService;
  28.         $this->security          $security;
  29.     }
  30.     // ROLE_ADMIN_WORK_EVALUATION_NEURO_CHECK_HOMEWORK_RESULT
  31.     protected function supports($attribute$subject)
  32.     {
  33.         return in_array($attribute, [
  34.             self::VIEWself::VIEW_WAS_READ_BTN,
  35.             self::ADMIN_EDIT_MAINself::ADMIN_ADD_HOMEWORKself::ADMIN_EDIT_HOMEWORKself::ADMIN_EDIT_ADDITINAL_LESSON_INFO,
  36.         ])
  37.             && $subject instanceof Lesson;
  38.     }
  39.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  40.     {
  41.         /** @var \App\Entity\User */
  42.         $user $token->getUser();
  43.         switch ($attribute) {
  44.             case self::VIEW:
  45.                 $state $this->checkerService->check($subject$token->getUser());
  46.                 if (
  47.                     in_array(
  48.                         $state,
  49.                         [
  50.                             $this->checkerService::STATE_NOT_AVAILABLE,
  51.                             $this->checkerService::STATE_CLOSE,
  52.                             $this->checkerService::STATE_WILL_BE_OPEN,
  53.                         ]
  54.                     )
  55.                 ) {
  56.                     return false;
  57.                 } else {
  58.                     return true;
  59.                 }
  60.                 break;
  61.             case self::VIEW_WAS_READ_BTN:
  62.                 return $this->btnCheckerService->check($subject$token->getUser());
  63.                 break;
  64.             case self::ADMIN_EDIT_MAIN:
  65.                 return $this->security->isGranted('ROLE_ADMIN_LESSON_EDIT'$user)
  66.                     && !$user->hasRole(RoleEnumType::ROLE_ADMIN_LESSON_HOMEWORK_EDITOR)
  67.                     || $this->security->isGranted('ROLE_ADMIN_LESSON_EDITOR'$user)
  68.                 ;
  69.             case self::ADMIN_ADD_HOMEWORK:
  70.                 return $this->security->isGranted('ROLE_ADMIN_LESSON_EDIT'$user)
  71.                     && !$user->hasRole(RoleEnumType::ROLE_ADMIN_LESSON_HOMEWORK_EDITOR)
  72.                     || $this->security->isGranted('ROLE_ADMIN_LESSON_EDITOR'$user)
  73.                 ;
  74.             case self::ADMIN_EDIT_ADDITINAL_LESSON_INFO:
  75.                 return 
  76.                 $this->security->isGranted('ROLE_ADMIN_LESSON_EDIT'$user)
  77.                     && !$user->hasRole(RoleEnumType::ROLE_ADMIN_LESSON_HOMEWORK_EDITOR)
  78.                     || $this->security->isGranted('ROLE_ADMIN_LESSON_EDITOR'$user)
  79.                 ;
  80.         }
  81.         return false;
  82.     }
  83. }