<?php
namespace Webkul\UVDesk\CoreFrameworkBundle\Security;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
class TicketVoter extends Voter
{
const MEMBER_VIEW = 'AGENT_VIEW';
const CUSTOMER_VIEW = 'CUSTOMER_VIEW';
private $container;
private $decisionManager;
public function __construct(ContainerInterface $container, AccessDecisionManagerInterface $decisionManager)
{
$this->container = $container;
$this->decisionManager = $decisionManager;
}
protected function supports($attribute, $subject)
{
if (!in_array($attribute, [self::MEMBER_VIEW, self::CUSTOMER_VIEW])) {
return false;
}
return $subject instanceof \Webkul\UVDesk\CoreFrameworkBundle\Entity\Ticket;
}
protected function voteOnAttribute($attribute, $ticket, TokenInterface $token)
{
$user = $token->getUser();
if (!$user instanceof \Webkul\UVDesk\SupportBundle\Entity\User) {
return false;
}
switch ($attribute) {
case self::MEMBER_VIEW:
if ($this->decisionManager->decide($token, ['ROLE_ADMIN'])) {
return true;
} else if ($this->decisionManager->decide($token, ['ROLE_AGENT'])) {
$userInstance = $user->getAgentInstance();
dump($userInstance->getTicketAccessLevel());
die;
// switch ($userInstance->getTicketAccessLevel()) {
// case TICKET::AGENT_GLOBAL_ACCESS:
// return true;
// case TICKET::AGENT_GROUP_ACCESS:
// // $userGroupAccess = (bool)$user->getGroups()->contains($ticket->getGroup());
// // $userTeamAccess = (bool)$user->getUserSubGroup()->contains($ticket->getSubGroup());
// // $access = $userGroupAccess ? $userGroupAccess : $userTeamAccess;
// break;
// case TICKET::AGENT_TEAM_ACCESS:
// // $access = (bool)($user->getUserSubGroup()->contains($ticket->getSubGroup()));
// break;
// case TICKET::AGENT_INDIVIDUAL_ACCESS:
// return (bool) ($user->getId() === $ticket->getAgent()->getId());
// break;
// default:
// break;
// }
}
break;
case self::CUSTOMER_VIEW:
if ($ticket->getIsTrashed()) {
return false;
}
if ($ticket->getCustomer() == $user) {
return true;
} else {
// $flag = 0;
// $collaborators = $ticket->getCollaborators();
// if(count($collaborators)) {
// foreach ($collaborators as $collaborator) {
// if($collaborator == $user)
// $flag = 1;
// }
// if($flag)
// return true;
// else
// return false;
// }
}
break;
default:
break;
}
return false;
}
// protected function isGranted($attribute, $ticket, $user = null)
// {
// if (!is_object($user)) {
// return false;
// }
// if($attribute == 'FRONT_VIEW') {
// if($ticket->getIsTrashed())
// return false;
// if($ticket->getCustomer() == $user)
// return true;
// else {
// $flag = 0;
// $collaborators = $ticket->getCollaborators();
// if(count($collaborators)) {
// foreach ($collaborators as $collaborator) {
// if($collaborator == $user)
// $flag = 1;
// }
// if($flag)
// return true;
// else
// return false;
// }
// }
// } else {
// if($user->getRole() == 'ROLE_AGENT') {
// switch($user->getDetail()['agent']->getTicketView()){
// case UserData::GLOBAL_ACCESS:
// $access = true;
// break;
// case UserData::GROUP_ACCESS:
// $userGroupAccess = (bool)$user->getGroups()->contains($ticket->getGroup());
// $userTeamAccess = (bool)$user->getUserSubGroup()->contains($ticket->getSubGroup());
// $access = $userGroupAccess ? $userGroupAccess : $userTeamAccess;
// break;
// case UserData::TEAM_ACCESS:
// $access = (bool)($user->getUserSubGroup()->contains($ticket->getSubGroup()));
// break;
// case UserData::INDIVIDUAL_ACCESS:
// default:
// $access = (bool)($ticket->getAgent() == $user);
// break;
// }
// if(!$access)
// $access = (bool)($ticket->getAgent() == $user);
// return $access;
// // if($ticket->getAgent() == $user)
// // return true;
// // else {
// // $flag = 0;
// // $agentGroups = $user->getGroups();
// // if($ticket->getGroup()) {
// // foreach ($agentGroups as $group) {
// // if($group->getId() == $ticket->getGroup()->getId())
// // $flag = 1;
// // }
// // if($flag)
// // return true;
// // else
// // return false;
// // } else {
// // }
// // }
// } else {
// return true;
// }
// }
// }
}