<?php
namespace App\Security\Voter;
use App\Model\Enum\AccessControl;
use App\Model\Enum\UserRole;
use App\Entity\User;
use App\Security\Guard\ApiGuardToken;
use App\Traits\Autowired\Manager\UserManagerTrait;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
class AccessControlVoter extends AbstractVoter {
use UserManagerTrait;
protected function getAttributes(): array {
return AccessControl::getValues();
}
protected function getEntityClass(): string {
return User::class;
}
/**
* @param string $attribute
* @param User $subject
* @param TokenInterface $token
* @return bool
*/
protected function voteOnAttribute($attribute, $subject, TokenInterface $token) {
$user = $token->getUser();
if (
$user instanceof User &&
$token instanceof ApiGuardToken &&
in_array($attribute, $token->getRights()) &&
in_array($attribute, $this->userManager->getAllRightFromUser($user))
) {
return self::ACCESS_GRANTED;
}
return self::ACCESS_ABSTAIN;
}
}