<?php
namespace App\Security\Voter;
use App\Entity\Role;
use App\Entity\User;
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 UserPermissionVoter extends RoleHierarchyVoter
{
/**
* UserPermissionVoter constructor.
* @param EntityManagerInterface $entityManager
* @param Security $security
*/
public function __construct(EntityManagerInterface $entityManager, Security $security)
{
$hierarchy = [];
// apply Voter only on admin logged user
if ($security->getUser() !== null && $security->getUser() instanceof User) {
$roles = $entityManager->getRepository(Role::class)->findAll();
// Construct hierarchy from all Roles
/** @var Role $role */
foreach ($roles as $role) {
foreach ($role->getRolePermissions() as $rolePermission) {
$hierarchy[$role->getName()][] = $rolePermission->getName();
}
}
}
parent::__construct(new RoleHierarchy($hierarchy), 'ROLE_');
}
}