vendor/nen/kennisbank-platform/src/Nen/Security/Voter/UserVoter.php line 14

Open in your IDE?
  1. <?php
  2. namespace Nen\Bundle\KennisbankPlatformBundle\Security\Voter;
  3. use App\Entity\User;
  4. use Nen\Bundle\KennisbankPlatformBundle\Entity\BoltPublication;
  5. use Nen\Bundle\KennisbankPlatformBundle\Service\PlatformUserRolesProvider;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  8. use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
  9. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  10. use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
  11. class UserVoter extends Voter
  12. {
  13.     private AccessDecisionManagerInterface $accessDecisionManager;
  14.     public function __construct(AccessDecisionManagerInterface $accessDecisionManager)
  15.     {
  16.         $this->accessDecisionManager $accessDecisionManager;
  17.     }
  18.     protected function supports($attribute$subject): bool
  19.     {
  20.         return $subject instanceof User;
  21.     }
  22.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  23.     {
  24.         /** @var User $user */
  25.         $user $subject;
  26.         $loggedInUser $token->getUser();
  27.         if (!$loggedInUser instanceof User) {
  28.             return false;
  29.         }
  30.         switch ($attribute) {
  31.             case 'remove':
  32.                 return $this->remove($user$loggedInUser);
  33.         }
  34.         return VoterInterface::ACCESS_ABSTAIN;
  35.     }
  36.     private function remove(User $userUser $loggedInUser): bool
  37.     {
  38.         $userToken = new UsernamePasswordToken($usernull'main'$user->getRoles());
  39.         if ($user->getId() === $loggedInUser->getId()) {
  40.             return false;
  41.         }
  42.         // You cannot remove users with the role customer service (and administrator).
  43.         if ($this->accessDecisionManager->decide($userToken, [PlatformUserRolesProvider::ROLE_CUSTOMER_SERVICE])) {
  44.             return false;
  45.         }
  46.         return true;
  47.     }
  48. }