Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai mis en place sur mon ordinateur un site qui fonctionne très bien actuellement, et heureusement...
La différence entre les 2 environnements doit être la version de Zend Framework, du coup, je ne sais pas si le problème vient de là.
Voici mon problème : j'arrive à me connecter à ma base de donnée, et mon site via un login et mdp, ma liste de données s'affiche.
Ensuite, dès que je souhaite ajouter un élément à ma base de données, je tombe sur une erreur qui me dit que je n'ai pas les privilèges pour réaliser cette action (message contenu dans un fichier erreur de mon site), de même si je ferme l'onglet de mon navigateur et relance.
Le contenu de la Base de données est exactement identique à celle sur le site en production. Dans mon controller qui ajoute les donnés, j'avais commenté l'affichage du message d'erreur, mais rien à changer ... donc l'appel ne doit pas se faire là.
Est-ce que quelqu'un aurait une piste ?
D'avance merci.
Vincent
Dernière modification par vince56 (03-12-2010 14:33:16)
Hors ligne
Bonjour,
je vois que malheureusement mon problème ne soulève pas d'idées. je connais très mal Zend, mais j'ai l'impression que le problèmes de privilèges vient de l'utilisation de Zend_Acl
si cela peut vous aider, voici mes fichiers que j'utilise :
index.php
<?php /* */ // Constantes principales... define("HOME_OS_DIR","C:/AppServ"); define("WEBAPP_DIR",HOME_OS_DIR."/www/zfProject"); define("MODEL_DIR",WEBAPP_DIR."/application/models"); define("ROOT_URL","http://zfproject.localhost/zfProject"); define("BASE_URL","/"); define("ZEND_FRAMEWORK_DIR",HOME_OS_DIR."C:/Program Files/ZendFrameworkCli/library"); define("LOG_FILE",HOME_OS_DIR."/logs/zend.log"); define("PLUGINS_DIR",WEBAPP_DIR."/application/plugins"); define("VALID_DIR",WEBAPP_DIR."/application/MyValid"); define("CGI_DIR",WEBAPP_DIR."/cgi"); set_include_path( ".".PATH_SEPARATOR. MODEL_DIR.PATH_SEPARATOR. ZEND_FRAMEWORK_DIR.PATH_SEPARATOR.PLUGINS_DIR.PATH_SEPARATOR. VALID_DIR.PATH_SEPARATOR. get_include_path() ); /*Pour pouvoir loader des classes Ó la Zend*/ require_once 'Zend/Loader.php'; // ... Comme par exemple le registre Zend_Loader::loadClass("Zend_Registry"); // Initialisation de la log Zend_Loader::loadClass('Zend_Log'); Zend_Loader::loadClass('Zend_Log_Writer_Stream'); $logger = new Zend_Log(); $logger->addWriter(new Zend_Log_Writer_Stream(LOG_FILE)); Zend_Registry::set("logger",$logger); Zend_Registry::get("logger")->debug("** IP ". $_SERVER["REMOTE_ADDR"] . "** URI=".$_SERVER["REQUEST_URI"]); // Controller init Zend_Loader::loadClass('Zend_Controller_Front'); Zend_Loader::loadClass('Zend_Controller_Router_Rewrite'); $controller = Zend_Controller_Front::getInstance(); $router = new Zend_Controller_Router_Rewrite(); $cmtRoute = new Zend_Controller_Router_Route( "comment/:action/:comment", array( "comment"=>null, "controller"=>"comment", "action"=>"display" ) ); $router->addRoute("comment",$cmtRoute); $controller->setBaseUrl(BASE_URL); $controller->setRouter($router); //Ici on indique le rÚpertoire des controlleurs $controller->setControllerDirectory('application/controllers'); $controller->throwExceptions(true); // initialisation du viewRenderer Zend_Loader::loadClass("Zend_View"); $view = new Zend_View(); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $viewRenderer->setView($view) ->setViewSuffix('phtml'); // chargement de la configuration Zend_Loader::loadClass('Zend_Config_Ini'); $config = new Zend_Config_Ini('application/configs/application.ini', 'general'); $registry = Zend_Registry::getInstance(); $registry->set('config', $config); // Mise en place de la db Zend_Loader::loadClass("Zend_Db"); Zend_Loader::loadClass("Zend_Db_Table"); $db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray()); Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('dbAdapter', $db); //Chargement de la classe d'authentification Zend_Loader::loadClass('Zend_Auth'); $auth = Zend_Auth::getInstance(); // CrÚation de l'objet Acl Zend_Loader::loadClass('Zend_Acl'); Zend_Loader::loadClass('Zend_Acl_Role'); Zend_Loader::loadClass('Zend_Acl_Resource'); Zend_Loader::loadClass('PluginAuth'); Zend_Loader::loadClass('MyAcl'); $acl = new MyAcl($auth); $controller->registerPlugin(new PluginAuth($auth, $acl)); //Ajout VLB /*$acl = new Zend_Acl(); $acl->addRole(new Zend_Acl_Role('invite')) ->addRole(new Zend_Acl_Role('membre')) ->addRole(new Zend_Acl_Role('admin')); $parents = array('invite', 'membre', 'admin'); $acl->addRole(new Zend_Acl_Role('someUser'), $parents); $acl->add(new Zend_Acl_Resource('error')); $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('com')); $acl->add(new Zend_Acl_Resource('dp')); $acl->add(new Zend_Acl_Resource('pay')); $acl->add(new Zend_Acl_Resource('retourpaybox')); $acl->add(new Zend_Acl_Resource('user')); $acl->add(new Zend_Acl_Resource('auth')); $acl->add(new Zend_Acl_Resource('xport')); $acl->add(new Zend_Acl_Resource('msg')); $acl->allow('admin'); */ /** * TODO Gestion des profils */ /** * Configuration par d+faut de Zend_Mail */ require_once 'Zend/Mail.php'; require_once 'Zend/Mail/Transport/Smtp.php'; $cfg = array('port' => $config->email->port, 'auth' => $config->email->auth, 'username' => $config->email->username, 'password' => $config->email->password, 'ssl' => $config->email->ssl ); define("MAIL_FROM",$config->email->mailfrom); $transport = new Zend_Mail_Transport_Smtp($config->email->smtp, $cfg); Zend_Mail::setDefaultTransport($transport); /* * Configuration par dÚfaut du translator de Zend_Form pour avoir les messages d'erreur en Franþais */ Zend_Loader::loadClass('Zend_Form'); Zend_Loader::loadClass('Zend_Translate'); $french = array( 'notAlnum' => "'%value%' ne contient pas que des lettres et/ou des chiffres.", 'notAlpha' => "'%value%' ne contient pas que des lettres.", 'notBetween' => "'%value%' n'est pas compris entre %min% et %max% inclus.", 'notBetweenStrict' => "'%value%' n'est pas compris entre %min% et %max% exclus.", 'dateNotYYYY-MM-DD'=> "'%value%' n'est pas une date au format AAAA-MM-JJ (exemple : 2000-12-31).", 'dateInvalid' => "'%value%' n'est pas une date valide.", 'dateFalseFormat' => "'%value%' n'est pas une date valide au format JJ/MM/AAAA (exemple : 31/12/2000).", 'notDigits' => "'%value%' ne contient pas que des chiffres.", 'emailAddressInvalid' => "'%value%' n'est pas une adresse mail valide selon le format adresse@domaine.", 'emailAddressInvalidHostname' => "'%hostname%' n'est pas un domaine valide pour l'adresse mail '%value%'.", 'emailAddressInvalidMxRecord' => "'%hostname%' n'accepte pas l'adresse mail '%value%'.", 'emailAddressDotAtom' => "'%localPart%' ne respecte pas le format dot-atom.", 'emailAddressQuotedString' => "'%localPart%' ne respecte pas le format quoted-string.", 'emailAddressInvalidLocalPart' => "'%localPart%' n'est pas une adresse individuelle valide.", 'notFloat' => "'%value%' n'est pas un nombre décimal.", 'notGreaterThan' => "'%value%' n'est pas strictement supérieur à '%min%'.", 'notInt'=> "'%value%' n'est pas un nombre entier.", 'notLessThan' => "'%value%' n'est pas strictement inférieur à '%max%'.", 'isEmpty' => "Ce champ est vide : vous devez le compléter.", 'stringEmpty' => "Ce champ est vide : vous devez le compléter.", 'regexNotMatch' => "'%value%' ne respecte pas le format '%pattern%'.", 'stringLengthTooShort' => "'%value%' fait moins de %min% caractères.", 'stringLengthTooLong' => "'%value%' fait plus de %max% caractères.", 'ibanNotSupported' => "'%value%' est un IBAN provenant d'un pays inconnu", 'ibanFalseFormat' => "'%value%' ne correspond pas au format en vigueur pour le pays concerné", 'ibanCheckFailed' => "'%value%' ne passe pas le test de la somme de contrôle. Veuillez vérifier votre saisie", 'fileFilesSizeTooBig' => "La taille de fichier maximale autorisée est de '%max%', cependant '%size%' ont été détectés", 'fileFilesSizeTooSmall' =>"La taille de fichier minimale autorisée est de '%min%', cependant '%size%' ont été détectés", 'fileFilesSizeNotReadable' => "Impossible de lire le fichier" ); $translate = new Zend_Translate('array', $french, 'fr'); Zend_Form::setDefaultTranslator($translate); Zend_Loader::loadClass('Zend_Paginator'); Zend_Loader::loadClass('Zend_View_Helper_PaginationControl'); Zend_Paginator::setDefaultScrollingStyle('Sliding'); Zend_View_Helper_PaginationControl::setDefaultViewPartial('my_pagination_control.phtml'); //Zend_Auth::getInstance()->clearIdentity(); // call dispatcher $controller->dispatch(); ?>
Ma classe MyAcl :
<?php class MyAcl extends Zend_Acl { public function __construct(Zend_Auth $auth) { $this->add(new Zend_Acl_Resource('error')); $this->add(new Zend_Acl_Resource('index')); $this->add(new Zend_Acl_Resource('com')); $this->add(new Zend_Acl_Resource('dp')); $this->add(new Zend_Acl_Resource('pay')); $this->add(new Zend_Acl_Resource('retour')); $this->add(new Zend_Acl_Resource('user')); $this->add(new Zend_Acl_Resource('auth')); $this->add(new Zend_Acl_Resource('xport')); $this->add(new Zend_Acl_Resource('msg')); $this->addRole(new Zend_Acl_Role('invite')); $this->addRole(new Zend_Acl_Role('membre'), 'invite'); $this->addRole(new Zend_Acl_Role('admin'), 'membre'); // Les invités peuvent uniquement voir le contenu et demander un mot de passe $this->allow('invite', 'error'); $this->allow('invite', 'pay'); $this->allow('invite', 'retour'); $this->allow('membre', 'index'); $this->allow('membre', 'auth'); $this->allow('membre', 'user'); $this->allow('membre', 'dp'); $this->allow('membre', 'xport'); $this->allow('membre', 'msg'); $this->allow('admin'); // Accès sans aucune restriction sauf celle d'ajouter une demande de paiement $this->deny('admin','dp','ajouter'); // Ajout d'un nouvel objet ACL //Zend_Loader::loadClass('Zend_Acl_Role'); // NOTE: Zend_Acl dépend de Zend_Auth, il faut toujours lui passer en paramètre pour obtenir l'identité } }
Le plugin utilisé avec la variable $acl :
<?php class PluginAuth extends Zend_Controller_Plugin_Abstract { private $_auth; private $_acl; private $_noauth = array('module' => 'default', 'controller' => 'auth', 'action' => 'login'); private $_noacl = array('module' => 'default', 'controller' => 'error', 'action' => 'privileges'); public function __construct($auth, $acl) { $this->_auth = $auth; $this->_acl = $acl; } public function preDispatch($request) { /*if (!Zend_Controller_Front::getDispatcher()->isDispatchable($request)) { renvoyer vers une 404 }*/ if ($this->_auth->hasIdentity()) { $role = $this->_auth->getIdentity()->role; } else { $role = 'invite'; } $controller = $this->getRequest()->getControllerName(); $action = $this->getRequest()->getActionName(); $module = $this->getRequest()->getModuleName(); $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']; } else { $module = $this->_noacl['module']; $controller = $this->_noacl['controller']; $action = $this->_noacl['action']; } } $request->setModuleName($module); $request->setControllerName($controller); $request->setActionName($action); } }
J'espère que ces éléments vont vous inspirer ...
Merci.
Hors ligne
toujours aucune inspiration ? si vous avez des questions ou si il vous manque des éléments, demandez moi
Hors ligne
Bonjour,
J'ai trouvé la solution tout seul, malgré les différents forums que j'ai pu essayer.
Je vous la fournis au cas ou qu'une autre personne rencontre le même problème :
Dans le fichier index.php, j'ai simplement modifier la définition de la constante 'ROOT_URL'
avant
define("ROOT_URL","http://zfproject.localhost/zfproject/");
après
define("ROOT_URL","http://zfproject.localhost/");A bientôt.
Hors ligne
Pages: 1