MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: /home/cafsindia/help.cafsindia.com/vendor/uvdesk/core-framework/Security/TicketVoter.php
<?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;
            // }
    //     }
    // }
}