2016-03-23 7 views
0

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.

Antwort

1

Meine Vorgehensweise besteht darin, eine ZendAclFactory zu erstellen und von dort eine Instanz zu erstellen oder aus dem Cache zurückzukommen.

+0

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 –