<?php
namespace EasyCorp\Bundle\EasyAdminBundle\Security;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException;
/**
* A slightly modified authorization checker optimized for performance and which
* doesn't trigger exceptions when security is not enabled.
*
* @author Javier Eguiluz <javier.eguiluz@gmail.com>
*/
class AuthorizationChecker implements AuthorizationCheckerInterface
{
private $authorizationChecker;
public function __construct(AuthorizationCheckerInterface $authorizationChecker)
{
$this->authorizationChecker = $authorizationChecker;
}
public function isGranted($permission, $subject = null): bool
{
// this check is needed for performance reasons because most of the times permissions
// won't be set, so this function must return as early as possible in those cases
if (empty($permission)) {
return true;
}
try {
return $this->authorizationChecker->isGranted($permission, $subject);
} catch (AuthenticationCredentialsNotFoundException $e) {
// this exception happens when there's no security configured in the application
// that's a valid scenario for EasyAdmin, where security is not required (although very common)
return true;
}
}
}