<?php
namespace App\Security\Voter;
use App\Entity\TbCliente;
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 TbClienteVoter extends Voter
{
private $tbPermisoUsuarioHimedAdminRepository;
public function __construct(TbPermisoUsuarioHimedAdminRepository $tbPermisoUsuarioHimedAdminRepository)
{
$this->tbPermisoUsuarioHimedAdminRepository = $tbPermisoUsuarioHimedAdminRepository;
}
protected function supports($attribute, $subject): bool
{
return in_array($attribute, [
'ACTIVAR_CLIENTE_HIMED_WEB',
'INACTIVAR_CLIENTE_HIMED_WEB',
'EDITAR_CLIENTE_HIMED_WEB',
'EDITAR_INFO_GENERAL',
'EDITAR_CONTACTO_TITULAR',
'EDITAR_INFO_ADICIONAL',
'CREAR_CLIENTES_HIMED'])
&& $subject instanceof TbCliente;
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool
{
/** @var TbCliente $subject */
$user = $token->getUser();
// si el usuario es anónimo, no concede el acceso
if (!$user instanceof UserInterface) {
return false;
}
// ... (comprueba las condiciones y devuelve true para conceder el permiso) ...
switch ($attribute) {
case 'ACTIVAR_CLIENTE_HIMED_WEB':
if ($this->tbPermisoUsuarioHimedAdminRepository->findBy(['intIdUsuarioHimedAdmin' => $user, 'boolActivarClienteHimedWeb' => true])) {
return true;
}
return false;
case 'INACTIVAR_CLIENTE_HIMED_WEB':
if ($this->tbPermisoUsuarioHimedAdminRepository->findBy(['intIdUsuarioHimedAdmin' => $user, 'boolInactivarClienteHimedWeb' => true])) {
return true;
}
return false;
case 'EDITAR_CLIENTE_HIMED_WEB':
if ($this->tbPermisoUsuarioHimedAdminRepository->findBy(['intIdUsuarioHimedAdmin' => $user, 'boolEditarClienteHimedWeb' => true])) {
return true;
}
return false;
case 'EDITAR_INFO_GENERAL':
if ($this->tbPermisoUsuarioHimedAdminRepository->findBy(['intIdUsuarioHimedAdmin' => $user, 'boolEditarInfoGeneral' => true])) {
return true;
}
return false;
case 'EDITAR_CONTACTO_TITULAR':
if ($this->tbPermisoUsuarioHimedAdminRepository->findBy(['intIdUsuarioHimedAdmin' => $user, 'boolEditarContactoTitular' => true])) {
return true;
}
return false;
case 'EDITAR_INFO_ADICIONAL':
if ($this->tbPermisoUsuarioHimedAdminRepository->findBy(['intIdUsuarioHimedAdmin' => $user, 'boolEditarInfoAdicional' => true])) {
return true;
}
return false;
case 'CREAR_CLIENTES_HIMED':
//logica que determina si el usuario puede acceder a la ruta o acción deseada
//devuelve true o false
if ($this->tbPermisoUsuarioHimedAdminRepository->findBy(['intIdUsuarioHimedAdmin' => $user, 'tintCrearClienteHimedWeb' => true])) {
return true;
}
return false;
}
return false;
}
}