<?php
namespace App\Twig\Extension;
use App\Security\Core\Authorization\AuthorizationTester;
use App\Util\Permissions;
use Symfony\Component\ExpressionLanguage\Expression;
use Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
/**
* Class ArraysExtension
* @package App\Twig\Extension
*/
final class SecurityExtension extends AbstractExtension
{
/**
* @var AuthorizationTester|null
*/
private ?AuthorizationTester $authorizationTester;
/**
* @param AuthorizationTester|null $authorizationTester
*/
public function __construct(?AuthorizationTester $authorizationTester = null)
{
$this->authorizationTester = $authorizationTester;
}
/**
* {@inheritDoc}
*/
public function getFunctions(): array
{
return [
new TwigFunction(
'maybe_granted',
[$this, 'maybeGranted'],
),
new TwigFunction(
'attributes_expression',
[$this, 'attributesExpression'],
),
];
}
/**
* @param string|array<string> $role
* @return bool
*/
public function maybeGranted($role): bool
{
if (null === $this->authorizationTester) {
return false;
}
try {
return $this->authorizationTester->maybeGranted($role);
} catch (AuthenticationCredentialsNotFoundException $e) {
return false;
}
}
/**
* @param array|string[]|string $attributes
* @return string|Expression
*/
public function attributesExpression(string|array $attributes): string|Expression
{
return Permissions::attributesExpression($attributes);
}
}