<?phpnamespace App\V4\Voters;use App\Security\User;use LogicException;use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;use Symfony\Component\Security\Core\Authorization\Voter\Voter;class OutlookSubscriptionConfigurationVoter extends Voter{ const OUTLOOK_SUBSCRIPTION_CONFIGURATION_SHOW_LIST = 'outlook_subscription_configuration_show_list'; const OUTLOOK_SUBSCRIPTION_CONFIGURATION_ADD_EDIT = 'outlook_subscription_configuration_add_edit'; const OUTLOOK_SUBSCRIPTION_CONFIGURATION_USER_SHOW_LIST = 'outlook_subscription_configuration_user_show_list'; const OUTLOOK_SUBSCRIPTION_CONFIGURATION_USER_ADD_EDIT = 'outlook_subscription_configuration_user_add_edit'; /** * @param $attribute * @param $subject * * @return bool */ protected function supports($attribute, $subject): bool { return in_array($attribute, [ self::OUTLOOK_SUBSCRIPTION_CONFIGURATION_SHOW_LIST, self::OUTLOOK_SUBSCRIPTION_CONFIGURATION_ADD_EDIT, self::OUTLOOK_SUBSCRIPTION_CONFIGURATION_USER_SHOW_LIST, self::OUTLOOK_SUBSCRIPTION_CONFIGURATION_USER_ADD_EDIT, ], true); } /** * @param $attribute * @param $subject * @param TokenInterface $token * * @return bool * * @throws LogicException */ protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool { $user = $token->getUser(); if (!$user instanceof User) { return false; } switch ($attribute) { case self::OUTLOOK_SUBSCRIPTION_CONFIGURATION_SHOW_LIST: return $this->canOutlookSubscriptionConfigurationShowList($user); case self::OUTLOOK_SUBSCRIPTION_CONFIGURATION_ADD_EDIT: return $this->canOutlookSubscriptionConfigurationAddEdit($user); case self::OUTLOOK_SUBSCRIPTION_CONFIGURATION_USER_SHOW_LIST: return $this->canOutlookSubscriptionConfigurationUserShowList($user); case self::OUTLOOK_SUBSCRIPTION_CONFIGURATION_USER_ADD_EDIT: return $this->canOutlookSubscriptionConfigurationUserAddEdit($user); } throw new LogicException('This should never happen'); } /** * @param User $user * * @return bool */ private function canOutlookSubscriptionConfigurationShowList(User $user): bool { return $user->isSuperAdmin(); } /** * @param User $user * * @return bool */ private function canOutlookSubscriptionConfigurationAddEdit(User $user): bool { return $user->isSuperAdmin(); } /** * @param User $user * * @return bool */ private function canOutlookSubscriptionConfigurationUserShowList(User $user): bool { return $user->isSuperAdmin(); } /** * @param User $user * * @return bool */ private function canOutlookSubscriptionConfigurationUserAddEdit(User $user): bool { return $user->isSuperAdmin(); }}