<?php
namespace App\Security\Voter\Library;
use App\Entity\Common\RoleInterface;
use App\Entity\User;
use App\Entity\UserWorkroom;
use App\Entity\WorkroomFolder;
use App\Entity\WorkroomResource;
use Doctrine\ORM\EntityManagerInterface;
/**
* Class WorkroomLibraryVoter.
*/
class WorkroomLibraryVoter extends LibraryVoter
{
private EntityManagerInterface $em;
/**
* WorkroomLibraryVoter constructor.
*/
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
/**
* {@inheritdoc}
*/
protected function supports($attribute, $subject): bool
{
return in_array($attribute, self::PERMISSIONS) &&
($subject instanceof WorkroomResource || $subject instanceof WorkroomFolder);
}
/**
* {@inheritdoc}
*/
public function canDelete($resource, User $user): bool
{
/** @var UserWorkroom $userWorkroom */
$userWorkroom = $this->em->getRepository(UserWorkroom::class)->findOneBy([
'workroom' => $resource->getWorkroom()->getId(),
'user' => $user->getId(),
'status' => true,
]);
return !empty($userWorkroom) && in_array($userWorkroom->getRoleName(), [RoleInterface::ROLE_PROJECT_MANAGER]);
}
/**
* {@inheritdoc}
*/
public function canStar($resource, User $user): bool
{
/** @var UserWorkroom $userWorkroom */
$userWorkroom = $this->em->getRepository(UserWorkroom::class)->findOneBy([
'workroom' => $resource->getWorkroom()->getId(),
'user' => $user->getId(),
'status' => true,
]);
return !empty($userWorkroom) && in_array($userWorkroom->getRoleName(), [RoleInterface::ROLE_PROJECT_MANAGER]);
}
/**
* {@inheritdoc}
*/
public function canRestore($resource, User $user): bool
{
/** @var UserWorkroom $userWorkroom */
$userWorkroom = $this->em->getRepository(UserWorkroom::class)->findOneBy([
'workroom' => $resource->getWorkroom()->getId(),
'user' => $user->getId(),
'status' => true,
]);
return !empty($userWorkroom) && in_array($userWorkroom->getRoleName(), [RoleInterface::ROLE_PROJECT_MANAGER]);
}
/**
* {@inheritdoc}
*/
public function canPermanentDelete($resource, User $user): bool
{
/** @var UserWorkroom $userWorkroom */
$userWorkroom = $this->em->getRepository(UserWorkroom::class)->findOneBy([
'workroom' => $resource->getWorkroom()->getId(),
'user' => $user->getId(),
'status' => true,
]);
return !empty($userWorkroom) && in_array($userWorkroom->getRoleName(), [RoleInterface::ROLE_PROJECT_MANAGER]);
}
/**
* {@inheritdoc}
*/
public function canDownload($resource, User $user): bool
{
/** @var UserWorkroom $userWorkroom */
$userWorkroom = $this->em->getRepository(UserWorkroom::class)->findOneBy([
'workroom' => $resource->getWorkroom()->getId(),
'user' => $user->getId(),
'status' => true,
]);
return !empty($userWorkroom);
}
/**
* {@inheritdoc}
*/
public function canEditName($resource, User $user): bool
{
/** @var UserWorkroom $userWorkroom */
$userWorkroom = $this->em->getRepository(UserWorkroom::class)->findOneBy([
'workroom' => $resource->getWorkroom()->getId(),
'user' => $user->getId(),
'status' => true,
]);
return !empty($userWorkroom) && in_array($userWorkroom->getRoleName(), [RoleInterface::ROLE_PROJECT_MANAGER]);
}
}