<?php
namespace App\Security\Api\Authorization\Voter\CoreModule;
use App\Helper\Api\Entity\RequestDataContainer;
use App\Security\Api\Authorization\Voter\AbstractCrudValidationVoter;
use App\Security\Api\Authorization\VoterAttribute\CoreModule\SessionVoterAttribute;
use App\Validator\Api\Data\CoreModule\UserDataValidator;
/**
* Validation voter.
*
* @package API
* @internal
*/
class SessionValidationVoter extends AbstractCrudValidationVoter
{
/**
* User validator interface.
*
* @var UserDataValidator
*/
protected UserDataValidator $userDataValidator;
/**
* Constructor.
*
* @param UserDataValidator $validator The standard validator.
* @param UserDataValidator $userDataValidator User validator.
*/
public function __construct(UserDataValidator $validator, UserDataValidator $userDataValidator)
{
// prevent false-positive php:S1185
$this->validator = $validator;
parent::__construct($validator);
$this->userDataValidator = $userDataValidator;
}
/**
* Returns list of supported attributes.
*
* @return array
*/
protected function getSupportedAttributes(): array
{
return [
SessionVoterAttribute::getAttribute(SessionVoterAttribute::METHOD_ID_READ_USER_DATA),
SessionVoterAttribute::getAttribute(SessionVoterAttribute::METHOD_ID_UPDATE_USER_BRIGHTNESS_MODE),
SessionVoterAttribute::getAttribute(SessionVoterAttribute::METHOD_ID_UPDATE_USER_LANGUAGE),
SessionVoterAttribute::getAttribute(SessionVoterAttribute::METHOD_ID_UPDATE_USER_PASSWORD)
];
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function readUserData(RequestDataContainer $subject): void
{
// no op
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function updateUserBrightnessMode(RequestDataContainer $subject): void
{
$this->userDataValidator->validateInputUpdateUserBrightnessMode($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function updateUserLanguage(RequestDataContainer $subject): void
{
$this->userDataValidator->validateInputUpdateUserLanguage($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function updateUserPassword(RequestDataContainer $subject): void
{
$this->userDataValidator->validateInputUpdateUserPassword($subject->getInput());
}
}