<?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\UserVoterAttribute;
use App\Validator\Api\Data\CoreModule\OrgUnitDataValidator;
use App\Validator\Api\Data\CoreModule\UserDataValidator;
/**
* Validation voter.
*
* @package API
* @internal
*/
class UserValidationVoter extends AbstractCrudValidationVoter
{
/**
* Organizational unit validator interface.
*
* @var OrgUnitDataValidator
*/
protected OrgUnitDataValidator $orgUnitDataValidator;
/**
* Constructor.
*
* @param UserDataValidator $validator The standard validator.
* @param OrgUnitDataValidator $orgUnitDataValidator Organizational unit validator.
*/
public function __construct(UserDataValidator $validator, OrgUnitDataValidator $orgUnitDataValidator)
{
// prevent false-positive php:S1185
$this->validator = $validator;
parent::__construct($validator);
$this->orgUnitDataValidator = $orgUnitDataValidator;
}
/**
* Returns list of supported attributes.
*
* @return array
* @noinspection PhpClassConstantAccessedViaChildClassInspection
*/
protected function getSupportedAttributes(): array
{
return [
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_CREATE),
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_DELETE),
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_LIST),
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_READ),
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_READ_ROLES),
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_READ_SCOPE),
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_READ_SCOPE_TREE),
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_UPDATE),
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_UPDATE_ACTIVE_STATUS),
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_UPDATE_ROLES),
UserVoterAttribute::getAttribute(UserVoterAttribute::METHOD_ID_UPDATE_SCOPE)
];
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function readRoles(RequestDataContainer $subject): void
{
$this->validator->validateInputReadRoles($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function readScope(RequestDataContainer $subject): void
{
$this->validator->validateInputReadScope($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function readScopeTree(RequestDataContainer $subject): void
{
$this->orgUnitDataValidator->validateInputReadScopeTree($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function updateRoles(RequestDataContainer $subject): void
{
$this->validator->validateInputUpdateRoles($subject->getInput());
}
/**
* Validation check.
*
* @param RequestDataContainer $subject The request data object to validate.
*/
protected function updateScope(RequestDataContainer $subject): void
{
$this->validator->validateInputUpdateScope($subject->getInput());
}
}