src/SettingsBundle/Security/SettingsVoter.php line 15

Open in your IDE?
  1. <?php
  2. namespace SettingsBundle\Security;
  3. use App\Backoffice\Enum\LawFirmStatusEnum;
  4. use AppBundle\Entity\LawFirm;
  5. use AppBundle\Entity\User;
  6. use AppBundle\Enum\FeatureAccessEnum;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. /**
  10.  * Class SettingsVoter
  11.  */
  12. class SettingsVoter extends Voter
  13. {
  14.     public const SETTINGS_TRUSTS 'SETTINGS_TRUSTS';
  15.     public const SHOW_USE_TRUST_TAX_SETTING 'SHOW_USE_TRUST_TAX_SETTING';
  16.     private static $attributes = [
  17.         self::SETTINGS_TRUSTS,
  18.         self::SHOW_USE_TRUST_TAX_SETTING,
  19.     ];
  20.     /**
  21.      * {@inheritdoc}
  22.      */
  23.     protected function supports($attribute$subject): bool
  24.     {
  25.         return in_array($attributeself::$attributestrue);
  26.     }
  27.     /**
  28.      * {@inheritdoc}
  29.      */
  30.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  31.     {
  32.         $user $token->getUser();
  33.         if (!$user instanceof User) {
  34.             return false;
  35.         }
  36.         if (self::SETTINGS_TRUSTS === $attribute) {
  37.             return $user->hasRole(FeatureAccessEnum::LAW_FIRM_ADMIN);
  38.         }
  39.         if (self::SHOW_USE_TRUST_TAX_SETTING === $attribute) {
  40.             /** @var LawFirm $lawFirm */
  41.             $lawFirm $user->getLawFirm();
  42.             $isInternal $lawFirm->getStatus() === LawFirmStatusEnum::TAG_INTERNAL;
  43.             $isUseTrustTaxInclusive $lawFirm->getLawFirmConfig()->isUseTrustTaxInclusive();
  44.             return $isInternal || !$isUseTrustTaxInclusive;
  45.         }
  46.         return false;
  47.     }
  48. }