Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 11-06-2007 09:19:23

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

[ZF 1.0 RC1][Zend_Acl]Stocker l'acl en session

Bonjour,
J'ai un petit soucis avec le Zend_Acl. Je suppose qu'il faut le stocker en session pour pouvoir tester les droits à chaque action, mais je n'y arrive pas. J'essaye en fait d'enregistrer l'Acl dans Zend_Registry, mais il refuse de l'enregistrer : quand je change de controller, il "oubli" mon index Acl...
Voilà, en gros, le code :

Code:

//dans Auth_Controller
$data = $authAdapter->getResultRowObject(null,'g_u_pass');
Zend_Loader::loadClass('Models_MyAcl');
$oAcl=new Models_MyAcl(Zend_Registry::get('dbAdapter'), $data->g_u_id);
Zend_Registry::set('acl', $oAcl);//Si je fait ici un print_r(Zend_Registry::get('acl')), c'est OK je vois l'Acl
$this->_redirect('/general');

Code:

//Dans General_Controller
if(Zend_Registry::get('acl')->isAllowed('curentUserRole','general_index_action')){
  echo 'OK!';
}else{
  echo 'NOK!';
}

J'ai l'erreur suivante à la ligne du "if" :

Code:

Fatal error: Uncaught exception 'Zend_Exception' with message 'No entry is registered for key 'acl'' in C:\wamp\php\includes\Zend\Registry.php:145 Stack trace: #0 C:\wamp\www\intralltub_general\default\ctrl\GeneralController.php(33): Zend_Registry::get('acl') #1 C:\wamp\php\includes\Zend\Controller\Action.php(497): GeneralController->indexAction() #2 C:\wamp\php\includes\Zend\Controller\Dispatcher\Standard.php(230): Zend_Controller_Action->dispatch('indexAction') #3 C:\wamp\php\includes\Zend\Controller\Front.php(889): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #4 C:\wamp\www\intralltub_general\index.php(96): Zend_Controller_Front->dispatch() #5 {main} thrown in C:\wamp\php\includes\Zend\Registry.php on line 145

Hors ligne

 

#2 11-06-2007 09:31:25

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [ZF 1.0 RC1][Zend_Acl]Stocker l'acl en session

Bonjour haltabush,

Zend_Registry, c'est pas pour les sessions. Sa durée de vie est uniquement le temps d'une requête. (en gros, c'est des super variables globales).

Pour la session, va voir du coté de Zend_Session ou utilise directement $_SESSION.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 11-06-2007 09:32:34

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: [ZF 1.0 RC1][Zend_Acl]Stocker l'acl en session

Ah?
Ca j'avais pas compris... Merci, je vais tester smile

Hors ligne

 

#4 11-06-2007 09:51:57

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: [ZF 1.0 RC1][Zend_Acl]Stocker l'acl en session

Ca marche mieux, mais c'est pas encore ça : voilà l'erreur retournée...

Code:

Fatal error: Uncaught exception 'PDOException' with message 'You cannot serialize or unserialize PDO instances' in C:\wamp\php\includes\Zend\Session.php:373 Stack trace: #0 [internal function]: PDO->__wakeup() #1 C:\wamp\php\includes\Zend\Session.php(373): session_start() #2 C:\wamp\php\includes\Zend\Session\Namespace.php(116): Zend_Session::start(true) #3 C:\wamp\php\includes\Zend\Auth\Storage\Session.php(85): Zend_Session_Namespace->__construct('Zend_Auth') #4 C:\wamp\php\includes\Zend\Auth.php(92): Zend_Auth_Storage_Session->__construct() #5 C:\wamp\php\includes\Zend\Auth.php(144): Zend_Auth->getStorage() #6 C:\wamp\www\intralltub_general\default\ctrl\AuthController.php(8): Zend_Auth->getIdentity() #7 C:\wamp\php\includes\Zend\Controller\Action.php(129): AuthController->init() #8 C:\wamp\php\includes\Zend\Controller\Dispatcher\Standard.php(209): Zend_Controller_Action->__construct(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http), Array) #9 C:\wamp\php\includes\Zend\Controller\Front.php(889): in C:\wamp\php\includes\Zend\Session.php on line 373

Fatal error: Exception thrown without a stack frame in Unknown on line 0

Je ne comrpends pas, je ne stocke pas d'instance de dbAdapter dans ma session... Je l'utilise pour générer mon Acl, mais c'est tout?
Voilà ma classe MyAcl, peut-être que vous verrez mieux que moi le problème.

Code:

<?php
class Models_MyAcl extends Zend_Acl
{
    public function __construct($db,$u_id)
    {
        parent::__construct();

        $roleGuest = new Zend_Acl_Role('curentUserRole');

        /*Zend_Loader::loadClass('Zend_Acl');
        Zend_Loader::loadClass('Zend_Acl_Role');
        Zend_Loader::loadClass('Zend_Acl_Resource');*/
        $this->addRole(new Zend_Acl_Role('curentUserRole'));
        $select=$db->select();
        $select->from('general_modules_actions', '*');
        $select->join('general_droits2','g_m_a_id=g_d_m_a_id', '*');
        $select->where($db->quoteInto('g_d_u_id=?',$u_id));
        $result=$db->fetchAll($select);
        foreach($result as $ressource){
            $this->add(new Zend_Acl_Resource($ressource['g_m_a_m_id'].'_'.$ressource['g_d_s_id'].'_'.$ressource['g_m_a_nom']));
            $this->allow('curentUserRole', $ressource['g_m_a_m_id'].'_'.$ressource['g_d_s_id'].'_'.$ressource['g_m_a_nom']);
        }
    }
}

Hors ligne

 

#5 11-06-2007 09:57:15

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [ZF 1.0 RC1][Zend_Acl]Stocker l'acl en session

Re-bonjour,

Tu ne peux pas sauvegarder de connexion PDO en session (pour sauvegarder un objet en session, il faut qu'il soit sérialisable, ça n'est pas le cas de tous les objets). Par contre les Acl sont sérialisables normalement.

Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 11-06-2007 09:59:00

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: [ZF 1.0 RC1][Zend_Acl]Stocker l'acl en session

J'avais compris poru le PDO, mais là je ne vois pas où j'ai casé un PDO dans ma session? Je n'y stock qu'un objet MyAcl de la classe ci-dessus (en gros, un ACL classique mais généré en fonction des infos contenues dans la BD).

edit : ca ne pourrait pas être lié au fait que j'utiliser un session_namespace par defaut (Default) alors que j'utilise, par ailleurs, le Zend_Registry pour stocker mon dbAdapter?

Dernière modification par haltabush (11-06-2007 10:11:13)

Hors ligne

 

#7 11-06-2007 10:32:04

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: [ZF 1.0 RC1][Zend_Acl]Stocker l'acl en session

Je comprends de moins en moins... J'ai retiré la gestion de l'Acl et ça me renvoie toujours la même erreur, apprarement ça viendrait du Zend_Auth... je sens que de la fumée ne va pas tarder à me sortir par les oreilles...

Hors ligne

 

#8 11-06-2007 10:38:45

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [ZF 1.0 RC1][Zend_Acl]Stocker l'acl en session

Zend_Auth sauvegarde le membre en session (pour ne pas faire de requêtes en base à chaque page). A priori, c'est le seul truc qu'il sauvegarde en session... (le 2e paramètre de new Zend_Auth_Result(...) ). Regarde si tu n'as pas un pointer PDO dedans...
A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#9 11-06-2007 10:39:55

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: [ZF 1.0 RC1][Zend_Acl]Stocker l'acl en session

Ben non apparement... J'ai déjà regardé, je cherche encore en désespoir de cause :'(

Hors ligne

 

#10 11-06-2007 14:50:27

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: [ZF 1.0 RC1][Zend_Acl]Stocker l'acl en session

J'Y ARRIVE PO!!!!
J'enlève tout, il me fait une erreur dans l'init de chaque controller, au niveau de "Zend_Auth::getInstance()->getIdentity()"...
L'erreur, c'est toujours la même : PDOException...
Si vous avez la moindre piste, moi là je suis perdu : j'ai récupéré la nouvelle version du ZF au cas où, ca n'a rien changé, et j'ai retiré tout ce que je pouvais de mon code... HELP PLEASE!!!


edit : il suffit que je poste poru que ça remarche. Je comprend vraiment pas, là, d'autant que je n'ai strictement rien fait entre les 2 cas...

re edit : je crois que j'ai compris smile En fait, mon erreur venait de ma classe My_Acl : je mettais en attribut un dbAdapter, et donc il était impossible de sérialiser mon objet. Ca, j'avais vaguement compris. En revanche, quand on recharge la page, dès qu'il utilise des sessions il doit recharger le tout, donc il indique une erreur partout où il y a un session_start. Pas franchement pratique pour le debuggage... Je pense pas être clair, mais bon je me comprend smile

Dernière modification par haltabush (11-06-2007 15:10:43)

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