src/Security/Voter/DatabaseVoter.php line 15
<?phpnamespace App\Security\Voter;use App\Entity\Administrator;use App\Entity\AdministratorGroup;use App\Entity\AdministratorPermission;use App\Entity\PortalAdministrator;use App\Entity\PortalAdministratorPermission;use Doctrine\ORM\EntityManagerInterface;use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;use Symfony\Component\Security\Core\Authorization\Voter\Voter;use Symfony\Component\Security\Core\User\UserInterface;class DatabaseVoter extends Voter{public const EDIT = 'POST_EDIT';public const VIEW = 'POST_VIEW';public function __construct(public EntityManagerInterface $manager){}protected function supports(string $attribute, $subject): bool{return true;}protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token,): bool{$user = $token->getUser();// if the user is anonymous, do not grant accessif (!$user instanceof UserInterface) {return false;}if ($attribute == 'ROLE_ADMIN') {if (in_array('ROLE_ADMIN', $user->getRoles())) {return true;} else {return false;}}if ($attribute == 'ROLE_PORTAL_ADMIN') {if (in_array('ROLE_PORTAL_ADMIN', $user->getRoles())) {return true;} else {return false;}}/** @var Administrator $user */if ($user instanceof Administrator) {foreach ($user->getAdministratorGroups() as $userGroup) {if ($userGroup->getName() === 'SuperAdmin') {return true;}/** @var AdministratorPermission $permission */$permission = $this->manager->getRepository(AdministratorPermission::class)->findOneBy(['name' => $attribute,]);if ($permission) {foreach ($permission->getAdmnistratorGroup() as $value) {if ($value === $userGroup) {return true;}}}}}/** @var PortalAdministrator $user */if ($user instanceof PortalAdministrator) {foreach ($user->getPortalAdministratorGroups() as $userGroup) {if ($userGroup->getName() === 'SuperAdmin') {return true;}/** @var PortalAdministratorPermission $permission */$permission = $this->manager->getRepository(PortalAdministratorPermission::class)->findOneBy(['name' => $attribute,]);if ($permission) {foreach ($permission->getPortalAdministratorGroup() as $value) {if ($value === $userGroup) {return true;}}}}}return false;}}