src/Security/Voter/UserPermissionVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\Role;
  4. use App\Entity\User;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter;
  7. use Symfony\Component\Security\Core\Role\RoleHierarchy;
  8. use Symfony\Component\Security\Core\Security;
  9. class UserPermissionVoter extends RoleHierarchyVoter
  10. {
  11. /**
  12. * UserPermissionVoter constructor.
  13. * @param EntityManagerInterface $entityManager
  14. * @param Security $security
  15. */
  16. public function __construct(EntityManagerInterface $entityManager, Security $security)
  17. {
  18. $hierarchy = [];
  19. // apply Voter only on admin logged user
  20. if ($security->getUser() !== null && $security->getUser() instanceof User) {
  21. $roles = $entityManager->getRepository(Role::class)->findAll();
  22. // Construct hierarchy from all Roles
  23. /** @var Role $role */
  24. foreach ($roles as $role) {
  25. foreach ($role->getRolePermissions() as $rolePermission) {
  26. $hierarchy[$role->getName()][] = $rolePermission->getName();
  27. }
  28. }
  29. }
  30. parent::__construct(new RoleHierarchy($hierarchy), 'ROLE_');
  31. }
  32. }