<?php
namespace App\Security\Voter;
use App\Repository\TbPreClienteRepository;
use App\Repository\TbPermisoUsuarioHimedAdminRepository;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* Centraliza toda la lógica de los permisos para las acciones en Clientes y usuarios de cliente de HiMed Web
* y luego reutilizarlos en muchos lugares.
*/
class TbPreClienteRepositoryVoter extends Voter
{
private $tbPermisoUsuarioHimedAdminRepository;
public function __construct(TbPermisoUsuarioHimedAdminRepository $tbPermisoUsuarioHimedAdminRepository)
{
$this->tbPermisoUsuarioHimedAdminRepository = $tbPermisoUsuarioHimedAdminRepository;
}
protected function supports($attribute, $subject): bool
{
// https://symfony.com/doc/current/security/voters.html
return in_array($attribute, [ 'CREAR_BASE_DATOS' ])
&& $subject instanceof TbPreClienteRepository;
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool
{
/** @var TbPreClienteRepository $subject */
$user = $token->getUser();
// si el usuario es anónimo, no concede el acceso
if (!$user instanceof UserInterface) {
return false;
}
// Comprueba cada permiso de forma individual y devuelve true o false
switch ($attribute) {
case 'CREAR_BASE_DATOS':
if ($this->tbPermisoUsuarioHimedAdminRepository->findBy(['intIdUsuarioHimedAdmin' => $user, 'boolCrearBaseDatos' => true])) {
return true;
}
return false;
}
return false;
}
}