<?php
namespace App\Security\Voter;
use App\Entity\Admin\AdminRole;
use App\Entity\Admin\AdminUser;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter;
use Symfony\Component\Security\Core\Role\RoleHierarchy;
use Symfony\Component\Security\Core\Security;
class AdminUserPermissionVoter extends RoleHierarchyVoter
{
public function __construct(EntityManagerInterface $entityManager, Security $security)
{
$hierarchy = [];
// apply Voter only on admin logged user
if ($security->getUser() !== null && $security->getUser() instanceof AdminUser) {
$adminRoles = $entityManager->getRepository(AdminRole::class)->findAll();
// Construct hierarchy from all Admin Roles
foreach ($adminRoles as $adminRole) {
foreach ($adminRole->getAdminRolePermissions() as $adminRolePermission) {
$hierarchy[$adminRole->getName()][] = $adminRolePermission->getName();
}
}
}
parent::__construct(new RoleHierarchy($hierarchy), 'ROLE_');
}
}