<?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\Permission;
use Knitink\UniverseBundle\Entity\Team;
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 TeamVoter 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 Team && $attribute === 'VOTER_KNITINK_UNIVERSE_TEAM';
}
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()))
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)
{
$database = $this->session->get('database');
if ($em == null) {
$this->databaseConnector->resetConnection($database, null, null, null, true);
$em = $this->databaseConnector->getEntityManager();
}
$entity = $em->getRepository(Permission::class)->findOneBy(['user' => $user->getId()]);
if ($entity != null) {
foreach ($entity->getTeams() as $team) {
if ($team->getId() === $subject->getId()) {
return true;
}
}
}
return false;
}
}