src/Security/Voter/Scholar/PracticalCaseUserVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter\Scholar;
  3. use App\Entity\Scholar\PracticalCase\PracticalCaseUser;
  4. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  5. use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
  6. use Symfony\Component\Security\Core\Security;
  7. class PracticalCaseUserVoter implements VoterInterface
  8. {
  9.     const PERM_ASSIGNED 'PERM_ASSIGNED';
  10.     public function __construct(
  11.         private Security $security,
  12.     )
  13.     {
  14.     }
  15.     public function vote(TokenInterface $token$subject, array $attributes): int
  16.     {
  17.         if (!in_array(self::PERM_ASSIGNED$attributes)) {
  18.             return VoterInterface::ACCESS_ABSTAIN;
  19.         }
  20.         if (!$subject instanceof PracticalCaseUser) {
  21.             return self::ACCESS_ABSTAIN;
  22.         }
  23.         $lastResponse $subject->getPracticalCaseResponses()->last();
  24.         if (!$lastResponse) {
  25.             return self::ACCESS_DENIED;
  26.         }
  27.         $assignee $lastResponse->getAssignedTo();
  28.         if (null !== $assignee && $token->getUser() === $assignee) {
  29.             return self::ACCESS_GRANTED;
  30.         }
  31.         return $this->security->isGranted('CHANNEL_USER_PERM_LESSON_SHOW'$subject->getPracticalCase()->getOwnerChannel());
  32.     }
  33. }