src/Security/InstructorModuleAccessVoter.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Entity\Course;
  4. use App\Entity\Module;
  5. use App\Entity\User;
  6. use App\Service\InstructorService;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. /**
  10.  * Checks if an instructor is able to access a given course.
  11.  */
  12. class InstructorModuleAccessVoter extends Voter
  13. {
  14.     private InstructorService $instructorService;
  15.     public function __construct(InstructorService $instructorService)
  16.     {
  17.         $this->instructorService $instructorService;
  18.     }
  19.     protected function supports(string $attribute$subject): bool
  20.     {
  21.         if (!$subject instanceof Module) {
  22.             return false;
  23.         }
  24.         return true;
  25.     }
  26.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  27.     {
  28.         $user $token->getUser();
  29.         if (!$user instanceof User) {
  30.             // must be logged in
  31.             return false;
  32.         }
  33.         // confirmed $subject is a Course object, thanks to `supports()`
  34.         /** @var Course $module */
  35.         $module $subject;
  36.         return in_array($module$this->instructorService->fetchInstructorModules($user));
  37.     }
  38. }