Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-08-2012 23:30:30

belhauss
Nouveau membre
Date d'inscription: 02-08-2012
Messages: 2

Zend_acl et navigation, les pages avec le tag resource ne s'affiche pa

Bonjour,

J'ai ce problème avec zend_navigation, les pages dans mon navigation.xml qui ont le tag <resource> ne s'affiche pas, aux differente types d'utilisateurs, (gust, member ou admin) ..

moi je voulais simplement ne pas afficher la partie administration du navigation aux utilisateurs normaux et aux visiteurs. mais je ne comprends pas pourquoi toutes les pages avec le tag resource ne s'affichent pas.

voilà une partie de mon fichier navigation.xml :

Code:

 [lang=xml]
<nav>
    <home>
        <label>Acceuil</label>
        <controller>index</controller>
        <action>index</action>
    </home>

    <contact>
        <label>Contact</label>
        <controller>index</controller>
        <action>contact</action>
        <resource>index</resource>
    </contact>

    <Categories>
        <label>Categories</label>
        <controller>index</controller>
        <action>categories</action>
    </Categories>

    <administration>
        <label>Administration</label>
        <controller>admin</controller>
        <action>index</action>
        <resource>admin</resource>
        <pages>
                <societes>
                    <label>Societes</label>
                    <controller>admin</controller>
                    <action>societes</action>
                    <resource>admin</resource>
                </societes>
        </pages>
    </administration>
</nav>

ma methode _initAcl() dans le bootstrap :

Code:

[lang=php]$acl = new Zend_Acl();
    // add the roles
    $acl->addRole(new Zend_Acl_Role('guest'));
    $acl->addRole(new Zend_Acl_Role('user'), 'guest');
    $acl->addRole(new Zend_Acl_Role('admin'), 'user');

    // add the resources I have only two controller + Error
    $acl->add(new Zend_Acl_Resource('index'));
    $acl->add(new Zend_Acl_Resource('admin'));
    $acl->add(new Zend_Acl_Resource('error'));

    // set up the access rules
    $acl->allow(null, array('error'));
    // a guest can only read content and login
    $acl->allow('guest', 'index', array('contact','index', 'login','categories'));
    // users can also work with content
    $acl->allow('user', 'index', array('signaler', 'logout'));
    $acl->deny('user','index',array('inscription','login'));
    // administrators can do anything
    $acl->allow('admin', 'admin', array('index', 'categories','ajout-categorie','modifier-categorie','supprimer-categorie'));
    $acl->deny('admin','index',array('contact'));

    Zend_Registry::set('acl', $acl);

et la methode _initNavigation() :

Code:

[lang=php]protected function _initNavigation(){

    $this->bootstrap('layout');
    $layout = $this->getResource('layout');
    $view = $layout->getView();
    $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
    $container = new Zend_Navigation($config);

    $acl = Zend_Registry::get('acl');
    $auth = Zend_Auth::getInstance();

    if($auth->hasIdentity()) {
        $identity = $auth->getIdentity();
        $role = strtolower($identity->role);
    }else{
        $role = 'guest';
    }
    echo $role;
    $view->navigation($container)->setAcl($acl)->setRole($role);
}

et finnalement la classe Application_Plugin_Acl :

Code:

[lang=php]class Application_Plugin_Acl extends Zend_Controller_Plugin_Abstract {
    
    public $acl;
    
    public function preDispatch(Zend_Controller_Request_Abstract $request){
        
        $this->acl = Zend_Registry::get('acl');
        // fetch the current user
        
        $auth = Zend_Auth::getInstance();
        
        if($auth->hasIdentity()) {
            $identity = $auth->getIdentity();
            $role = strtolower($identity->role);
        }else{
            $role = 'guest';
        }
        $controller = $request->controller;
        $action = $request->action;
        if (!$this->acl->isAllowed($role, $controller, $action)) {
            if ($role === 'guest') {
                $request->setControllerName('index');
                $request->setActionName('login');
            } else {
                $request->setControllerName('error');
                $request->setActionName('noauth');
            }
        }
    }
}

et j'ai cette ligne dans mon application.ini :

Code:

resources.frontController.plugins.acl = Application_Plugin_Acl

en espérant que j'ai été claire,  j'attends avec impatience vos suggestions et merci en avance smile .

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages