<?php
namespace FlexApp\Security\Voter;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class _ExtendVoter extends Voter
{
/**
* Переменная для наследования. Указываем свои методы
*/
protected array $methods = [];
/**
* Дефолтные методы для проверок
*/
private array $methodsDefault = [
'VIEW',
'CREATE',
'EDIT',
'DEL',
'DELETE',
'HISTORY',
'SWITCHUSER',
];
public function __construct()
{
}
/**
* Проверяем наличие методов. Проерка не строгая.
* Если нет соответвий, то результат нейтральный
* Если $attribute является объектом, то выдаем сразу труе
* @param $attribute
* @return mixed
*/
public function checkMethods($attribute)
{
if (is_string($attribute)) {
$attribute = strtoupper($attribute);
$this->methodsDefault = array_map('strtoupper', $this->methodsDefault);
if (in_array($attribute, $this->methodsDefault)) {
return $this::ACCESS_GRANTED;
}
$this->methods = array_map('strtoupper', $this->methods);
if (in_array($attribute, $this->methods)) {
return $this::ACCESS_GRANTED;
}
return $this::ACCESS_ABSTAIN;
}
return $this::ACCESS_GRANTED;
}
/**
* Сначала проверка идет по всем supports вотеров до первого TRUE
*/
protected function supports(string $attribute, $subject): bool
{
return false;
}
/**
* Потом проверка идет по всем voteOnAttribute вотеров до первого TRUE
*/
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
return false;
}
}