<?php
namespace App\Security\Voters;
use App\Entity\Collab;
use App\Entity\Equipment;
use App\Entity\Recruit;
use App\Entity\RecruitContract;
use App\Entity\User;
use App\Entity\Vehicule;
use App\Security\SecurityTrait;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\Security;
class RecruitVoter extends Voter
{
use SecurityTrait;
const LIST = "list_recruit";
const READ = "read_recruit";
const CONTRACT = "contract_recruit";
const READ_CONFIDENTIAL_CONTRACT = "read_confidential_contract_recruit";
const TRANSFERT = "transfert_recruit";
const SEND_SHEET = "send_sheet_recruit";
const ADD = "add_recruit";
const REMOVE = "remove_recruit";
private $security;
public function __construct(Security $security)
{
$this->security = $security;
}
protected function supports($attribute, $subject)
{
return in_array($attribute, [self::LIST, self::ADD]) ||
(in_array($attribute, [
self::READ,
self::CONTRACT,
self::TRANSFERT,
self::SEND_SHEET,
self::REMOVE
]) && $subject instanceof Recruit) ||
(in_array($attribute, [
self::READ_CONFIDENTIAL_CONTRACT
]) && $subject instanceof RecruitContract);
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
$user = $token->getUser();
if (!$user instanceof User) {
return false;
}
switch ($attribute) {
case self::LIST:
return $this->isAdmin() || $this->isRH();
case self::READ:
return $this->isAdmin() || $this->isRH();
case self::CONTRACT:
return $this->isAdmin() || $this->isRh();
case self::READ_CONFIDENTIAL_CONTRACT:
return (
$this->isAdmin() ||
$subject->getStatus() === null ||
$subject->getStatus()->getGrade() < 5
);
case self::TRANSFERT:
return ($this->isAdmin() || $this->isRH()) && $subject->getRecruitContract() !== null;
case self::SEND_SHEET:
return $this->isAdmin() || $this->isRH();
case self::ADD:
return $this->isAdmin() || $this->isRH();
case self::REMOVE:
return $this->isAdmin();
}
throw new \LogicException('This code should not be reached!');
}
}