Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour bonjour,
Je suis débutant sur Zend, j'ai réalisé mon site grace au tutoriel tres bien fait qui est celui ci:
http://g-rossolini.developpez.com/tutor … k/debuter/
J'ai ensuite intégré un systeme de session grace a ce tutoriel :
http://r-benyacoub.developpez.com/tutor … zend-auth/
Jusque la tout va bien, ça marche niquel.
Mais apparament, il est fortement conseillé d'utilisé Zend_Acl pour les Droits d'acces.
Etant donné que j'ai "guest", "membre", "proprio" et "admin" comme type d'acces.
J'ai donc suivi ce tutoriel :
http://alain-sahli.developpez.com/tutor … ework/acl/
Mais j'ai l'erreur suivante :
Fatal error: Class 'Zend_Acl' not found in url
J'ai cru comprendre que le tutoriel n'etait plus a jour, j'utilise le Zend Framework 1.0.1.
Quels modifications sont a effectuer pour que ça marche ? Je suis debutant, je sais pas trop comment régler mon probleme :s
Cordialement
Florent
Dernière modification par fblutch (24-10-2007 11:03:39)
Hors ligne
Bonsoir,
Cela ne semble pas précisé dans le tutoriel, mais as-tu pensé à inclure la classe ?
Zend_Loader::loadClass('Zend_Acl');
A+,
Damien
Hors ligne
effectivement, il manquait pas mal de class, apres les avoirs tous inclus, maintenant ça me fait
Fatal error: Uncaught exception 'Zend_Exception' with message 'File "ModuleDispatcher.php" was not found' in /.../library/Zend/Loader.php:159 Stack trace: #0 /.../library/Zend/Loader.php(91): Zend_Loader::loadFile('ModuleDispatche...', Array, true) #1 /.../index.php(22): Zend_Loader::loadClass('Zend_Controller...') #2 {main} thrown in /.../library/Zend/Loader.php on line 159
Dernière modification par fblutch (21-09-2007 00:50:09)
Hors ligne
personne pour m'aidé a corriger mon code?
Hors ligne
Bonjour,
Tu peux nous envoyer ton index.php, sinon on va avoir un peu de mal à corriger le code
Philippe
Hors ligne
en fait j'aimerais savoir si il est toujours d'actualité le tutorial sur Zend_Acl
et si avec cela, me permetera bien de donné acces ou nom en fonction de l'utilisateur qui se sera logé.
Car j'ai peur de mal avoir compris le but de Zend_Acl en fait :s
Car moi j'pensais que sa me premeterais de géré avec une variable "status" dans la session de definir si il a acces a tel endroit ou nom d'une façon simple sans faire pein de test.
Sinon mon erreur c'est avec le dispatcher et j'arrive vraiment pas a resoudre :s
Hors ligne
Bonjour,
Dans "comment débuter" il y a 2 tutos sur Zend_Acl :
http://www.kitpages.fr/zf_zendAcl.php : te donne le fonctionnement de base de Zend_Acl et donne la syntaxe
http://alain-sahli.developpez.com/tutor … ework/acl/ te donne un exemple d'utilisation sur un site réel.
Les 2 tutos sont à jour
A+, Philippe
Hors ligne
Merci pour les tutos, mais j'ai tjrs un bug pr utilisé l'acl avec l'auth ce coup ci.
j'ai mon fichier Auth.php qui est dans library/Zend/My/Plugin/auth.php
<?php class Zend_My_Plugin_Auth extends Zend_Controller_Plugin_Abstract { private $_auth; private $_acl; private $_noauth = array('module' => 'default', 'controller' => 'auth', 'action' => 'login'); private $_noacl = array('module' => 'default', 'controller' => 'index', 'action' => 'index'); public function __construct($auth, $acl) { $this->_auth = $auth; $this->_acl = $acl; } public function preDispatch($request) { if ($this->_auth->hasIdentity()) { $role = $this->_auth->getIdentity()->getUser()->status; } else { $role = 'guest'; } $controller = $request->controller; $action = $request->action; $module = $request->module; $resource = $controller; if (!$this->_acl->has($resource)) { $resource = null; } if (!$this->_acl->isAllowed($role, $resource, $action)) { if (!$this->_auth->hasIdentity()) { $module = $this->_noauth['module']; $controller = $this->_noauth['controller']; $action = $this->_noauth['action'];
J'ai un fichier MyAcl.php qui se situe dans ./aplication/
que j'inclu grace a un include "./application/MyAcl.php";
Donc j'ai defini les roles comme sa:
<?php $acl = new Zend_Acl(); // creer des ressources $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('evenement')); $acl->add(new Zend_Acl_Resource('etablissement')); $acl->add(new Zend_Acl_Resource('photo')); $acl->add(new Zend_Acl_Resource('membre')); $acl->add(new Zend_Acl_Resource('auth')); $acl->add(new Zend_Acl_Resource('admin')); // creation de roles "individus" $acl->addRole(new Zend_Acl_Role('guest')); $acl->addRole(new Zend_Acl_Role('membre'), 'guest'); $acl->addRole(new Zend_Acl_Role('proprio'), 'membre'); $acl->addRole(new Zend_Acl_Role('admin'), 'proprio'); // Les invités peuvent uniquement voir le contenu $acl->allow('guest', 'index'); // indiquer qui a le droit de faire quoi $acl->allow('guest', 'evenement', 'index'); $acl->allow('guest', 'evenement', 'view'); $acl->allow('guest', 'evenement', 'photo'); $acl->allow('guest', 'etablissement', 'index'); $acl->allow('guest', 'etablissement', 'view'); $acl->allow('guest', 'photo', 'index'); $acl->allow('guest', 'photo', 'view'); $acl->allow('guest', 'membre', 'view'); $acl->allow('guest', 'auth', 'login'); $acl->allow('membre', 'evenement'); $acl->deny('membre', 'evenement', 'supprimer'); $acl->allow('membre', 'membre'); $acl->deny('membre', 'membre', 'supprimer'); $acl->allow('membre', 'photo'); $acl->deny('membre', 'photo', 'supprimer'); $acl->allow('membre', 'etablissement', 'fidele'); $acl->allow('membre', 'etablissement', 'ajoutercom'); $acl->allow('proprio', 'etablissement'); $acl->deny('proprio', 'etablissement', 'supprimer'); $acl->allow('admin'); // Accès sans aucune restriction
et mon bootstrap :
<?php error_reporting(E_ALL|E_STRICT); date_default_timezone_set('Europe/Paris'); set_include_path('.' . PATH_SEPARATOR . './library' . PATH_SEPARATOR . './application/models/' . PATH_SEPARATOR . get_include_path()); // load configuration include "Zend/Loader.php"; Zend_Loader::loadClass('Zend_Controller_Front'); Zend_Loader::loadClass('Zend_Config_Ini'); Zend_Loader::loadClass('Zend_Registry'); Zend_Loader::loadClass('Zend_Db'); Zend_Loader::loadClass('Zend_Db_Table'); Zend_Loader::loadClass('Zend_Debug'); Zend_Loader::loadClass('Zend_Auth'); Zend_Loader::loadClass('Zend_Acl'); Zend_Loader::loadClass('Zend_Acl_Role'); Zend_Loader::loadClass('Zend_Acl_Resource'); Zend_Loader::loadClass('Zend_My_Plugin_Auth'); // load configuration $config = new Zend_Config_Ini('./application/config.ini', 'general'); $registry = Zend_Registry::getInstance(); $registry->set('config', $config); // setup database $db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray()); Zend_Db_Table::setDefaultAdapter($db); $dbAdapter = Zend_Db::factory($config->db->adapter, $config->db->config->toArray()); Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('dbAdapter', $db); // Création de l'objet Auth $auth = Zend_Auth::getInstance(); // Création de l'objet Acl include "./application/MyAcl.php"; // setup controller $frontController = Zend_Controller_Front::getInstance(); $frontController->throwExceptions(true); $frontController->setControllerDirectory('./application/controllers'); $frontController->registerPlugin(new Zend_My_Plugin_Auth($auth, $acl)); $frontController->setParam('auth', $auth); // run! $frontController->dispatch();
Voila, ci avec sa, vous pouviez m'aidé a resoudre mon probleme d'acces.
Donc là j'ai cette erreur là :
Parse error: syntax error, unexpected $end in /home/web/virtual/over-book.com/htdocs/site2/library/Zend/My/Plugin/Auth.php on line 43
et si je ferme les } sa me donne sa :
Strict Standards: Declaration of Zend_My_Plugin_Auth::preDispatch() should be compatible with that of Zend_Controller_Plugin_Abstract::preDispatch() in /home/web/virtual/over-book.com/htdocs/site2/library/Zend/My/Plugin/Auth.php on line 47 Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Session must be started before any output has been sent to the browser; output started in /home/web/virtual/over-book.com/htdocs/site2/library/Zend/My/Plugin/Auth.php/47' in /home/web/virtual/over-book.com/htdocs/site2/library/Zend/Session.php:359 Stack trace: #0 /home/web/virtual/over-book.com/htdocs/site2/library/Zend/Session/Namespace.php(116): Zend_Session::start(true) #1 /home/web/virtual/over-book.com/htdocs/site2/library/Zend/Auth/Storage/Session.php(85): Zend_Session_Namespace->__construct('Zend_Auth') #2 /home/web/virtual/over-book.com/htdocs/site2/library/Zend/Auth.php(92): Zend_Auth_Storage_Session->__construct() #3 /home/web/virtual/over-book.com/htdocs/site2/library/Zend/Auth.php(134): Zend_Auth->getStorage() #4 /home/web/virtual/over-book.com/htdocs/site2/library/Zend/My/Plugin/Auth.php(24): Zend_Auth->hasIdentity() #5 /home/web/virtual/over-book.com/htdocs/site2/library/Zend/Controller/Plugin/Broker.php(307): Zend_My_Plugin_Auth->preDisp in /home/web/virtual/over-book.com/htdocs/site2/library/Zend/Session.php on line 359
Donc voila, je sais plus trop quoi faire, mais il y a de l'avancement tout de meme
Hors ligne
Bonjour,
dans ton plugin auth, change
public function preDispatch($request)
en
public function preDispatch(Zend_Controller_Request_Abstract $request)
Sinon ta fonction n'est pas strictement compatible avec son parent. Tu dois avoir E_STRICT activé dans ton niveau d'erreur, c'est pour ça qu'il est pointilleux sur des trucs comme ça...
A+, Philippe
Hors ligne
Merci pour la rapidité sa marche !!!
enfin... il n'y a plus d'erreur mais le probleme est que je peux accedé a admin alors que je ne suis pas logé :s
edit, et qu'elle est la difference concrete entre $_noauth et $_noacl dans le Auth.php ?
Merci
Dernière modification par fblutch (16-10-2007 11:34:40)
Hors ligne
pas de reponse ?
on dirais que le plugin ne sert a rien en fait, car je peux accedé a tout kan je suis logé quoi qu'il arrive :s
ou est le probleme ?
Hors ligne
pas d'idée du pourquoi j'ai acces a tout meme si je suis logué en membre ou en rien du tout ? svp
Hors ligne
noauth c'est la page où tu vas quand tu n'es pas loggué et noacl c'est celle où tu vas quand tu es loggué mais que tu n'as pas les droits nécessaires.
Sinon mets des logs dans ton appli pour savoir où est le problème, quelles données tu reçois à quel endroit pour voir pourquoi tu es autorisé...
A+, Philippe
Hors ligne
bon alors j'ai testé avec des fichiers de log, sa marche bien dans les fichier de log les noacl, noauth corresponde bien a se que j'ai défini.
Mais en fait sa ne redirige pas le $controller.
donc j'ai essayé un $this->_redirect('/'.$controller.'/'.$action);
mais sa me dit que je peux pas faire un redirect dans mon plugin.
Donc je sais pas trop quoi faire. . .
edit :
bon j'ai trouvé la solution !!!
il fallait mettre :
$request->setControllerName($controller);
$request->setActionName($action);
youpi Zend_Acl marche! Merci pour votre aide:)
Dernière modification par fblutch (23-10-2007 11:31:36)
Hors ligne
Pages: 1