<?php
namespace SettingsBundle\Security;
use App\Backoffice\Enum\LawFirmStatusEnum;
use AppBundle\Entity\LawFirm;
use AppBundle\Entity\User;
use AppBundle\Enum\FeatureAccessEnum;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
* Class SettingsVoter
*/
class SettingsVoter extends Voter
{
public const SETTINGS_TRUSTS = 'SETTINGS_TRUSTS';
public const SHOW_USE_TRUST_TAX_SETTING = 'SHOW_USE_TRUST_TAX_SETTING';
private static $attributes = [
self::SETTINGS_TRUSTS,
self::SHOW_USE_TRUST_TAX_SETTING,
];
/**
* {@inheritdoc}
*/
protected function supports($attribute, $subject): bool
{
return in_array($attribute, self::$attributes, true);
}
/**
* {@inheritdoc}
*/
protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool
{
$user = $token->getUser();
if (!$user instanceof User) {
return false;
}
if (self::SETTINGS_TRUSTS === $attribute) {
return $user->hasRole(FeatureAccessEnum::LAW_FIRM_ADMIN);
}
if (self::SHOW_USE_TRUST_TAX_SETTING === $attribute) {
/** @var LawFirm $lawFirm */
$lawFirm = $user->getLawFirm();
$isInternal = $lawFirm->getStatus() === LawFirmStatusEnum::TAG_INTERNAL;
$isUseTrustTaxInclusive = $lawFirm->getLawFirmConfig()->isUseTrustTaxInclusive();
return $isInternal || !$isUseTrustTaxInclusive;
}
return false;
}
}