Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-07-2009 12:22:42

oswalidos
Membre
Date d'inscription: 12-07-2009
Messages: 39

[résolu][ZF 1.8] problem d'instanciation de la classe my_acl

salut,
j'essaie de realiser un petit exemple avec zend_auth et zend_acl

le plugin pour le controle d'acces est le suivant :
/auth/application/controllers/Plugin_Acl_Auth.php :

Code:

class Plugin_Acl_Auth extends Zend_Controller_Plugin_Abstract {
  private $_acl = null;
 
  public function __construct(Zend_Acl $acl) {
    $this->_acl = $acl;
    /*
    $front = Zend_Controller_Front::getInstance();
    $acl = new Auth_Acl();
    $front->registerPlugin(new Plugin_Acl_Auth($acl));
    */
  }
 
  public function preDispatch(Zend_Controller_Request_Abstract $request) {
    //As in the earlier example, authed users will have the role user
    $role = (Zend_Auth::getInstance()->hasIdentity()) ? 'administrateur' : 'invite';
 
    //For this example, we will use the controller as the resource:
    $resource = $request->getControllerName();
 
    if(!$this->_acl->isAllowed($role, $resource)) {
      //If the user has no access we send him elsewhere by changing the request
      $request->setModuleName('default')
              ->setControllerName('Auth')
              ->setActionName('login');
    }
  }
}

la classe derivé de zend_acl est la suivante :
/auth/application/controllers/Auth_Acl.php :

Code:

<?php
class Auth_Acl extends Zend_Acl {
  public function __construct() {
    
    $this->addRole(new Zend_Acl_Role('administrateur'));
 
    $this->addRole(new Zend_Acl_Role('invite'));
 
    $this->add(new Zend_Acl_Resource('index'));
 
    $this->allow('adminitrateur','index');
 
    $this->deny('invite','index');
  }
}

a propos de l'emplacement de ces deux fichiers, je vois que c'est la meilleur pour que zend detecte la classe Auth_Acl ,ce qui pose mon 1er probleme

mon probleme est exactement dans ce bout de code :

Code:

$front = Zend_Controller_Front::getInstance();
$acl = new Auth_Acl();
$front->registerPlugin(new Plugin_Acl_Auth($acl));

où le mettre ?
mes tentatives sont :
-dans le bootstrap ,mais apparement a ce moment l'autoloader n'est pas encore chargé pour pouvoir charger la classe Auth_Acl qui étend  zend_acl .
-dans le index.php mais sans succes aussi .

===> la classe est reconnu(cad pas de message d'erreur "class Auth_Acl not found") seulement si je met le bout de code dans le plugin  (comme vous le voyez en commentaire) .je vois que c'est bizarre de faire registerPlugin dans le constructeur de plugin lui meme.

le 2eme probleme est :
quand ce code doit etre exécuté par rapport a tout le processus ?
j'ai lu plusieurs docs mais j'ai pas encore bien assimilé le fonctionnement interne de zend .
si quelqu'un peut m'aider pour comprendre les details du processus dés la reception de la requete jusqu'a l'envoie de la page au client , s'il y a meme un lien expliquant ça en detail je suis preneur .

merci d'avance smile

Dernière modification par oswalidos (23-07-2009 23:23:22)

Hors ligne

 

#2 23-07-2009 13:20:15

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu][ZF 1.8] problem d'instanciation de la classe my_acl

Personnellement je fais comme ça:

C:\wamp\www\%app%\library\My\Acl.php
C:\wamp\www\%app%\application\controllers\AuthController.php

J'instancie ma classe : $acl = new My_Acl();

Dans mon fichier application.ini j'ai rajouté la ligne suivante :
autoloaderNamespaces[] = "My_"


aka miboo

Hors ligne

 

#3 23-07-2009 23:22:35

oswalidos
Membre
Date d'inscription: 12-07-2009
Messages: 39

Re: [résolu][ZF 1.8] problem d'instanciation de la classe my_acl

merci infinement , une parfaite solution a ce qu'il parait 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