src/Security/Voter/Library/WorkroomLibraryVoter.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter\Library;
  3. use App\Entity\Common\RoleInterface;
  4. use App\Entity\User;
  5. use App\Entity\UserWorkroom;
  6. use App\Entity\WorkroomFolder;
  7. use App\Entity\WorkroomResource;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. /**
  10.  * Class WorkroomLibraryVoter.
  11.  */
  12. class WorkroomLibraryVoter extends LibraryVoter
  13. {
  14.     private EntityManagerInterface $em;
  15.     /**
  16.      * WorkroomLibraryVoter constructor.
  17.      */
  18.     public function __construct(EntityManagerInterface $em)
  19.     {
  20.         $this->em $em;
  21.     }
  22.     /**
  23.      * {@inheritdoc}
  24.      */
  25.     protected function supports($attribute$subject): bool
  26.     {
  27.         return in_array($attributeself::PERMISSIONS) &&
  28.             ($subject instanceof WorkroomResource || $subject instanceof WorkroomFolder);
  29.     }
  30.     /**
  31.      * {@inheritdoc}
  32.      */
  33.     public function canDelete($resourceUser $user): bool
  34.     {
  35.         /** @var UserWorkroom $userWorkroom */
  36.         $userWorkroom $this->em->getRepository(UserWorkroom::class)->findOneBy([
  37.             'workroom' => $resource->getWorkroom()->getId(),
  38.             'user' => $user->getId(),
  39.             'status' => true,
  40.         ]);
  41.         return !empty($userWorkroom) && in_array($userWorkroom->getRoleName(), [RoleInterface::ROLE_PROJECT_MANAGER]);
  42.     }
  43.     /**
  44.      * {@inheritdoc}
  45.      */
  46.     public function canStar($resourceUser $user): bool
  47.     {
  48.         /** @var UserWorkroom $userWorkroom */
  49.         $userWorkroom $this->em->getRepository(UserWorkroom::class)->findOneBy([
  50.             'workroom' => $resource->getWorkroom()->getId(),
  51.             'user' => $user->getId(),
  52.             'status' => true,
  53.         ]);
  54.         return !empty($userWorkroom) && in_array($userWorkroom->getRoleName(), [RoleInterface::ROLE_PROJECT_MANAGER]);
  55.     }
  56.     /**
  57.      * {@inheritdoc}
  58.      */
  59.     public function canRestore($resourceUser $user): bool
  60.     {
  61.         /** @var UserWorkroom $userWorkroom */
  62.         $userWorkroom $this->em->getRepository(UserWorkroom::class)->findOneBy([
  63.             'workroom' => $resource->getWorkroom()->getId(),
  64.             'user' => $user->getId(),
  65.             'status' => true,
  66.         ]);
  67.         return !empty($userWorkroom) && in_array($userWorkroom->getRoleName(), [RoleInterface::ROLE_PROJECT_MANAGER]);
  68.     }
  69.     /**
  70.      * {@inheritdoc}
  71.      */
  72.     public function canPermanentDelete($resourceUser $user): bool
  73.     {
  74.         /** @var UserWorkroom $userWorkroom */
  75.         $userWorkroom $this->em->getRepository(UserWorkroom::class)->findOneBy([
  76.             'workroom' => $resource->getWorkroom()->getId(),
  77.             'user' => $user->getId(),
  78.             'status' => true,
  79.         ]);
  80.         return !empty($userWorkroom) && in_array($userWorkroom->getRoleName(), [RoleInterface::ROLE_PROJECT_MANAGER]);
  81.     }
  82.     /**
  83.      * {@inheritdoc}
  84.      */
  85.     public function canDownload($resourceUser $user): bool
  86.     {
  87.         /** @var UserWorkroom $userWorkroom */
  88.         $userWorkroom $this->em->getRepository(UserWorkroom::class)->findOneBy([
  89.             'workroom' => $resource->getWorkroom()->getId(),
  90.             'user' => $user->getId(),
  91.             'status' => true,
  92.         ]);
  93.         return !empty($userWorkroom);
  94.     }
  95.     /**
  96.      * {@inheritdoc}
  97.      */
  98.     public function canEditName($resourceUser $user): bool
  99.     {
  100.         /** @var UserWorkroom $userWorkroom */
  101.         $userWorkroom $this->em->getRepository(UserWorkroom::class)->findOneBy([
  102.             'workroom' => $resource->getWorkroom()->getId(),
  103.             'user' => $user->getId(),
  104.             'status' => true,
  105.         ]);
  106.         return !empty($userWorkroom) && in_array($userWorkroom->getRoleName(), [RoleInterface::ROLE_PROJECT_MANAGER]);
  107.     }
  108. }