Ich verwende XML
, um meine ACL-Konfigurationen zu speichern, und erweiterte die Zend ACL
Bibliothek, um die Ressourcen zu analysieren ROLES &, und es funktioniert gut.Zend Framework 2, wie die ACL für bessere Leistung Cache
Unten ist mein ACL.XML
<?xml version="1.0" encoding="UTF-8"?>
<permissions>
<roles>
<role name="guest" />
<role name="user" inherits="guest" />
<role name="admin" inherits="user" />
</roles>
<resources>
<module name="account" allow="user">
<controller name="account\controller\account" allow="user">
<action name="login" deny="admin" />
</controller>
</module>
<module name="album" allow="user">
<controller name="album\controller\album" allow="user">
<action name="index" allow="user" />
<action name="add" allow="admin" />
</controller>
</module>
<module name="application" allow="user">
<controller name="application\controller\index" allow="user">
<action name="index" allow="user" />
</controller>
</module>
</resources>
</permissions>
Und mein Module.php
Code, der zur Zeit über MvcEvent::EVENT_DISPATCH
Ereignis aufgerufen wird,
$serviceManager = $event->getApplication()->getServiceManager();
$configCache = simplexml_load_file(__DIR__.'/config/acl.xml');
$serviceManager->get('memcache')->setItem('cacheXml', $configCache);
//print_r($serviceManager->get('memcache')->getItem('cacheXml'));
$this->_acl = $serviceManager->get('Acl');
$this->_acl->initAcl($configCache);
if (! $this->_acl->_isAllowed('user', $event->getRouteMatch())) {
$url = $event->getRouter()->assemble(array('action' => 'index'), array('name' => 'application'));
$response = $event->getResponse();
$response->getHeaders()->addHeaderLine('Location', $url);
$response->setStatusCode(302);
$response->sendHeaders();
exit;
} else {
echo 'Access granted :) ';
}
Wie kann ich meine ACL Klasse gecached (von Service-Manager) oder von einem anderen bedeutet, dass das Stück Code beständiger und optimierter wird. Ich verwende memcache
für meine caching
.
Dank @Jean wird es untersuchen, btw ich bin jetzt caching die ACL in Memcache und es funktioniert gut, Ill auch post meinen Ansatz. Ich werde es auch versuchen –