Domanda

Ho creato un MVC con Zend leggendo http: // quadro .zend.com / manuale / it / zend.controller.modular.html .

Il problema è che non riesco a trovare un modo per utilizzare Zend_Acl con struttura modulare. Zend_Acl non ha semplicemente un metodo per aggiungere moduli. Esso consente solo me aggiunga controller e azione.

Come si usa Zend_Acl con structrue modulare? E 'anche possibile con la versione corrente di Zend Framework?

È stato utile?

Soluzione

E 'assolutamente è. Questo è quello che facciamo nel nostro progetto. Abbiamo autenticare URI percorsi ($request->getPathInfo()), come: /admin/user/edit. Qui "admin" è un modulo, "utente" è un controller, e "modifica" è un'azione. E abbiamo un plugin di accesso:

class Our_Application_Plugin_Access extends Zend_Controller_Plugin_Abstract {
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        foreach (self::current_roles() as $role) {
            if (
                Zend_Registry::get('bootstrap')->siteacl->isAllowed(
                    $role,
                    $request->getPathInfo()
                )
            ) return;
        }

        $this->not_allowed($request);
    }

   ...
}

Registrato in Application.ini:

resources.frontController.plugins.access = "Our_Application_Plugin_Access"

Altri suggerimenti

Altre possibilità di Ivan è quello di impostare le risorse invece che solo "controllore" a qc. come "modulo-Controller".

E 'possibile, lo uso ogni volta. Anzitutto ricordare che la risorsa che Zend_Acl verificherà è un'entità arbitraria (una stringa) , non necessario correlata a un particolare modulo o controllore. Può essere la stringa "ciao" e nel programma è possibile verificare se l'utente può accedere alla risorsa "ciao". Io uso spesso alcune risorse arbitrarie come "login-button", "pulsante logout" per mostrare il link nel Zend_Navigation.

Nel tuo caso, è necessario definire la risorsa (nella LCA) come alcuni stringa che può essere mappato a un layout del modulo / controller. Ad esempio per la barra dei moduli foo e il controller di definire la risorsa "foo.bar". Che nella procedura di controllo di accesso potrete leggere il modulo e il controller nome e unirli in una stringa per ottenere la risorsa.

In un esempio pratico:

class Application_Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract {

...

public function preDispatch(Zend_Controller_Request_Abstract $request){
    $module = $request->getModuleName();
    $controller = $request->getControllerName();
    $action = $request->getActionName();

...

   $resource = $module . '.' . $controller; //we create the custom resource according to the model we have defined
...

    $role=NULL;
    if($this->_auth->hasIdentity()){
        $identity = $this->_auth->getStorage()->read(); //depending on your implementation
        $role = $identity->role; //depending on your implementation
    }
...

  if(!$this->_acl->isAllowed($role, $resource, $action)){
        //deny access       
    }
    //allow access
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top