src/Security/Voter/Procedure/ProcedureOldVoter.php line 17

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Security\Voter\Procedure;
  4. use App\Model\User\Entity\User\Role\Permission;
  5. use App\Model\User\Entity\User\Role\RoleConstants;
  6. use App\Model\Work\Procedure\Entity\Status;
  7. use App\ReadModel\Profile\ProfileFetcher;
  8. use App\Security\UserIdentity;
  9. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  10. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  11. use Symfony\Component\Security\Core\Security;
  12. //TODO: Воутер не доделан!
  13. class ProcedureOldVoter extends Voter
  14. {
  15.     public const PROCEDURE_LIST 'procedure_list';
  16.     public const PROCEDURE_LIST_OWNER 'procedure_list_owner';
  17.     public const PROCEDURE_SHOW 'procedure_show_old';
  18.     public const PROCEDURE_CREATE 'procedure_create';
  19.     public const PROCEDURE_EDIT 'procedure_edit';
  20.     public const PROCEDURE_RECALL 'procedure_recall';
  21.     public const PROCEDURE_SIGN_XML 'procedure_sign_xml';
  22.     public const PROCEDURE_UPLOAD_FILE_TO 'procedure_upload_file_to';
  23.     public const PROCEDURE_CREATE_PROTOCOL 'procedure_create_protocol';
  24.     public const PROCEDURE_DELETE_FILE_TO 'procedure_delete_file_to';
  25.     private $security;
  26.     private $profileFetcher;
  27.     public function __construct(Security $securityProfileFetcher $profileFetcher)
  28.     {
  29.         $this->security $security;
  30.         $this->profileFetcher $profileFetcher;
  31.     }
  32.     protected function supports(string $attribute$subject): bool
  33.     {
  34.         return in_array($attribute, [self::PROCEDURE_LISTself::PROCEDURE_LIST_OWNERself::PROCEDURE_SHOWself::PROCEDURE_CREATEself::PROCEDURE_EDITself::PROCEDURE_RECALLself::PROCEDURE_SIGN_XMLself::PROCEDURE_UPLOAD_FILE_TOself::PROCEDURE_CREATE_PROTOCOLself::PROCEDURE_DELETE_FILE_TO], true);
  35.     }
  36.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  37.     {
  38.         if ($this->security->isGranted(RoleConstants::moderator()->getValue())) {
  39.             return true;
  40.         }
  41.         if ($this->security->isGranted(RoleConstants::acceptor()->getValue())) {
  42.             return true;
  43.         }
  44.         $user $token->getUser();
  45.         if (!$user instanceof UserIdentity) {
  46.             return false;
  47.         }
  48.         if ($this->security->isGranted(RoleConstants::organizerCustomer()->getValue())) {
  49.             return true;
  50.         }
  51.         $profile $this->profileFetcher->find($user->getProfileId());
  52.         switch ($attribute) {
  53.             case self::PROCEDURE_LIST:
  54.                 return $user->isPermission(Permission::PROCEDURE_LIST);
  55.                 break;
  56.             case self::PROCEDURE_LIST_OWNER:
  57.                 return $user->isPermission(Permission::PROCEDURE_LIST_OWNER);
  58.                 break;
  59.             case self::PROCEDURE_SHOW:
  60.                 if ($profile !== null) {
  61.                     if ($profile->isParticipant()) {
  62.                         return $subject->status != Status::new()->getName();
  63.                     }
  64.                 }
  65.                 return $user->isPermission(Permission::PROCEDURE_SHOW);
  66.                 break;
  67.             case self::PROCEDURE_CREATE:
  68.                 return $user->isPermission(Permission::PROCEDURE_CREATE);
  69.                 break;
  70.             case self::PROCEDURE_EDIT:
  71.                 return $user->isPermission(Permission::PROCEDURE_EDIT);
  72.                 break;
  73.             case self::PROCEDURE_RECALL:
  74.                 return $user->isPermission(Permission::PROCEDURE_RECALL);
  75.                 break;
  76.             case self::PROCEDURE_SIGN_XML:
  77.                 return $user->isPermission(Permission::PROCEDURE_SIGN_XML);
  78.                 break;
  79.             case self::PROCEDURE_UPLOAD_FILE_TO:
  80.                 return $user->isPermission(Permission::PROCEDURE_UPLOAD_FILE_TO);
  81.                 break;
  82.             case self::PROCEDURE_DELETE_FILE_TO:
  83.                 return $user->isPermission(Permission::PROCEDURE_DELETE_FILE_TO);
  84.                 break;
  85.             case self::PROCEDURE_CREATE_PROTOCOL:
  86.                 return $user->isPermission(Permission::PROCEDURE_CREATE_PROTOCOL);
  87.                 break;
  88.         }
  89.         return false;
  90.     }
  91. }