Zend\Permissions\Acl не предполагает использование базы данных (см.
framework.zend.com/manual/current/en/modules/zend....).
Получается из assertion-а к БД никак не обратиться?
Можно было бы и там оставить, но тогда придётся отключить кеширование, да вот беда - BjyAuthorize такой возможности не предоставляет. Описать им проблему в
issue не хотите?
Надо делать запросы в каком-то другом месте?
Если хотите оставить кеширование, то придётся делать в каком-то другом месте.
Могут предложить "грязное" / временное решение проблемы, за которое мне будет стыдно, но всё же.
Не хранить ObjectManager внутри IsUserDrunkAssertion, а получать его через статический метод другого класса:
class IsUserDrunkAssertionFactory implements FactoryInterface
{
static protected $objectManager;
public function createService(ServiceLocatorInterface $serviceLocator)
{
static::$objectManager = $serviceLocator->get('doctrine.entitymanager.orm_default');
$assertion = new IsUserDrunkAssertion();
return $assertion;
}
static public function getObjectManager()
{
return static::$objectManager;
}
}
class IsUserDrunkAssertion implements AssertionInterface
{
public function assert(Acl $acl, RoleInterface $role = null, ResourceInterface $resource = null, $privilege = null)
{
$objectManager = IsUserDrunkAssertionFactory::getObjectManager();
$decision = // ... здесь бы запрос сделать
return $decision;
}
}