Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Acl & Zend_Auth
Zend_Acl & Zend_Auth Forum d'entraide pour les composants Zend_Acl & Zend_Auth du Zend Framework (contrôle d'accès, gestion des droits, authentification, etc.). Avant de poster -> Cours Zend_Acl et Zend_Auth.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/06/2007, 09h30   #1
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Par défaut [Zend_Acl] Stockage en registry

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 :
1
2
3
4
5
6
//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 :
1
2
3
4
5
6
//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
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 10h08   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

As-tu essayé avec une instance du registre plutôt qu'en invoquant les méthodes de manière statique ?
Exemple : http://g-rossolini.developpez.com/tu...ge=modele#LV-B
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 11h24   #3
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
En fait, apparement les Registry sont limités à une requête, enfin je n'ai pas très bien compris; j'ai utilisé les Zend_Session en remplacement mais du coup il me sort d'autres erreurs... Je creuse, je creuse et je vous tiendrais au courant (si j'y arrive )
__________________
HADOPI : black-out du net!
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2007, 20h56   #4
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Si tu stockes dans le registry c'est effectivement limité à une requête... Donc t'es obligé de stocké en session mais pour stocker un objet en session tu dois d'abord le sérialiser (serialize) puis quand tu veux l'utiliser tu dois le déserialisé (unserialize).

Code :
1
2
3
4
5
6
7
8
9
<?php
// Insertion de l'objet
$defaultNamespace = new Zend_Session_Namespace('default');
$defaultNamespace->acl = serialize($monObjetAcl);
 
// Récupérer l'objet
$defaultNamespace = new Zend_Session_Namespace('default');
$monObjetAcl = unserialize($defaultNamespace->acl);
?>
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 09h46   #5
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Tiens, j'avais oublié de vous tenir au courant finalement...
En fait, je n'ai pas besion de sérialiser mon objet, je suppose que ça doit être la méthode par défaut dans le _toString de Zend_Acl...
Par contre, un truc qui m'a fait perdre du temps : je ne me rappelais plus qu'il fallait appeler la classe avant de faire un session_start (enfin Zend_Session::start() ici)
__________________
HADOPI : black-out du net!
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h26.


 
 
 
 
Partenaires

Hébergement Web