<?php
namespace AdminBundle\Security;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use AdminBundle\Entity\Ticket;
use AdminBundle\Entity\User;
class TicketVoter extends Voter
{
private const EDIT = 'edit';
private const DELETE = 'delete';
/**
* {@inheritdoc}
*/
protected function supports($attribute, $subject)
{
$allowedAttributes = [
self::EDIT,
self::DELETE,
];
if (!in_array(strtolower($attribute), $allowedAttributes)) {
return false;
}
if (!$subject instanceof Ticket) {
return false;
}
return true;
}
/**
* {@inheritdoc}
*/
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
$user = $token->getUser();
if (!$user instanceof User) {
return false;
}
$allowedRoles = [
User::ROLE_ADMIN,
User::ROLE_OPERATOR,
];
return !empty(array_intersect($allowedRoles, $user->getRoles()));
}
}