<?php
/**
* This file is part of the Knitink Project package.
*
* Created by Globunet Soluciones Tecnologicas, SL. on 13/01/17. <info@globunet.com>
* Copyright (c) 2016 Knitink Technologies, SL. All rights reserved.
*/
namespace Knitink\UniverseBundle\Security;
use Knitink\UniverseBundle\Entity\Enum\PlayerProfile;
use Knitink\UniverseBundle\Entity\Enum\SensorType;
use Knitink\UniverseBundle\Entity\Sensor;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\HttpFoundation\Session\Session;
use Globunet\DinamicDatabaseBundle\Services\DatabaseConnector;
class SensorVoter extends Voter
{
private $databaseConnector;
private $session;
public function __construct(DatabaseConnector $databaseConnector, Session $session)
{
$this->databaseConnector = $databaseConnector;
$this->session = $session;
}
protected function supports($attribute, $subject)
{
return $subject instanceof Sensor && $attribute === 'VOTER_KNITINK_UNIVERSE_SENSOR';
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
$user = $token->getUser();
if(($user instanceof \Symfony\Component\Security\Core\User\User || $user instanceof \Knitink\CoreBundle\Entity\User)){
if( in_array("ROLE_SUPER_ADMIN", $user->getRoles()) ||
in_array("ROLE_KNK_UNIV_SUPER_ADMIN", $user->getRoles()) ||
in_array("ROLE_KNK_UNIV_ADMIN", $user->getRoles()) ||
in_array("VOTER_KNITINK_UNIVERSE_SENSOR", $user->getRoles())
)
return true;
}
if (!$user instanceof \Knitink\CoreBundle\Entity\User) {
return false;
}
return $this->checker($user, $attribute, $subject);
}
public function checker($user, $attribute, $subject, $em = null)
{
// Sensor de Nivel
$sensorType = SensorType::WATER_DRAIN_VOLUME;
$modelVersion = $this->session->get('modelVersion');
if($modelVersion < 2375){
$sensorType = 11;
}
/*
echo $sensorType."<br>";
echo $subject->getType()."<br>";
echo "ModelVersion: ".$modelVersion."<br>";
echo "teamId: ".$this->session->get('teamId')."<br>";
*/
if($subject->getType() == $sensorType && PlayerProfile::isDrainCheck($subject->getPlayer()->getProfile())){
return false;
}
return true;
}
}