src/Security/Voter/AdminUserPermissionVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\Admin\AdminRole;
  4. use App\Entity\Admin\AdminUser;
  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 AdminUserPermissionVoter extends RoleHierarchyVoter
  10. {
  11. public function __construct(EntityManagerInterface $entityManager, Security $security)
  12. {
  13. $hierarchy = [];
  14. // apply Voter only on admin logged user
  15. if ($security->getUser() !== null && $security->getUser() instanceof AdminUser) {
  16. $adminRoles = $entityManager->getRepository(AdminRole::class)->findAll();
  17. // Construct hierarchy from all Admin Roles
  18. foreach ($adminRoles as $adminRole) {
  19. foreach ($adminRole->getAdminRolePermissions() as $adminRolePermission) {
  20. $hierarchy[$adminRole->getName()][] = $adminRolePermission->getName();
  21. }
  22. }
  23. }
  24. parent::__construct(new RoleHierarchy($hierarchy), 'ROLE_');
  25. }
  26. }