Problèm de privilèges avec ZEND framework 1.11.0

Signaler
Messages postés
1
Date d'inscription
lundi 1 décembre 2003
Statut
Membre
Dernière intervention
2 décembre 2010
-
 willimartial -
Bonjour,
voilà je rencontre un problème avec mon site, sur mon ordinateur (il fonctionne chez l'hébergeur)
J'arrive à me connecter à mon site via login/pwd, puis j'ai accès au menu qui me liste mes données.
Je peux ouvrir un formulaire qui me permet de créer un élément dans ma base de données, mais dès que je valide ce formulaire, je suis renvoyé sur la view '/error/privileges'
J'obtiens la même erreur si je lance un export de la base de donnée.
Je ne comprends pas d'où ça vient, le contenu de la BDD est identique entre mon ordinateur et le serveur.
Auriez-vous une solution ? ou début de piste ?

Si cela peut vous aider, voici le code utiliser :

index.php

[code=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."/dev/ZendFramework-1.9.2/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));


/**
* 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();
?>
 
la classe MyAcl : 


[code=php]<?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
        $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é
    }
}
[code]
et le plugin utilisé pour ce chargement d'acl dans l'index : 

[code=php]
<?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);
}
}


Si cela peut vous aider à me donner une piste .. voir une solution ...
merci.

1 réponse


Bonjour moi c'est Willi tchatchouang je suis un etudiant en troisième année a IUT fotso victor de bandjoun Comme chaque année nous sommes appele réaliser des application
Au fait je développe en PHP5 avec le framework zend et je suis vraiment depuis je suis encore au début de mon projet
voici mon problème
J'ai un modelé appelle guichet ou je mets l'ensseble de mes requte sql j'ai egalment une vue appéle guichet et un fichier Indexcontroler (le controlleur par defaut) je voudrais qu'a caque enregistrment d'un guichet je me rassure si ce sernier n'existe pas deja
voici les code

La classe l'action enregistrementguichet
public function enregistreguichetAction()
{
// action body

$guichet = new Application_Model_DbTable_Guichet();
$this->view->guichet = $guichet->fetchAll(); // affecton a la vue ce formulaire

$formguichet = new Application_Form_Formulaireenregistrementguichet(); // Insbtance du formulaire d'enregistrement du guichet
$formguichet->submit->setLabel("Valider"); // libele du formulaie
$this->view->form = $formguichet;

if ($this->getRequest()->isPost()) // on teste si le formulaire a été soumis si la valeur retourner par la methode ispost de l'objet requestest true alor on conclus que oui
{
$DonneeFormulaire = $this->getRequest()->getPost(); // etant donné que le formulaire a été soumis nous pouvons dont récupére les information du formulaire avec la methode getpost
if ($formguichet->isValid($DonneeFormulaire)) // on verifie si ces données sont valides avec la methode isvalid();
{
$NomGuichet = $formguichet->getValue("NOM_GUICHET"); // si les donnée sont valide on récuper dont les donneé les valeurs soumis
$Requette_Guichet_Model = new Application_Model_DbTable_Guichet(); // cree un instance de la classe model relatif au requet du guichet
//$resultat = $Requette_Guichet_Model->RechercheDonneDB($NomGuichet);
//Application_Model_DbTable_Guichet(). RechercheDonneDB();
// foreach ($resultat as $valeur):
if ( empty($Requette_Guichet_Model->RechercheDonneDB($NomGuichet)))
{
$formguichet->populate($DonneeFormulaire);
}
else
{
$Requette_Guichet_Model->EnregistreGuichet($NomGuichet); // appale de la methode enregistrement_guichet pour l_ajout dans la base de donne
$this->_helper->redirector('index'); // redirection vers la page index

}
//endforeach;









/*foreach ($this->guichet as $valeur)
{
if ($valeur->NOM_GUICHET == $NomGuichet)
{
$formguichet->populate($DonneeFormulaire);
//$Requette_Guichet_Model->EnregistreGuichet($NomGuichet); // appale de la methode enregistrement_guichet pour l_ajout dans la base de donne
//$this->_helper->redirector('index'); // redirection vers la page index

}
else
{
$Requette_Guichet_Model->EnregistreGuichet($NomGuichet); // appale de la methode enregistrement_guichet pour l_ajout dans la base de donne
$this->_helper->redirector('index'); // redirection vers la page index

}
}
*/
//$tab = $Requette_Guichet_Model->RechercheDonneDB();
//$tab =0;

//$tab = $Requette_Guichet_Model->fetchAll();
$tab = Array();
//$tab = $Requette_Guichet_Model->RechercheDonneDB();
$i=0;

/*
foreach($this->guichet as $valeur)
{
$tab = array( $valeur->NOM_GUICHET);
}
$NbreData = mysql_num_rows($tab);
$num = array_count_values($tab);

//for ($i=0 ; $i< $tab->length ; $i ++)
//{
for ($j=0 ; $j< $tab->length ; $j ++)
{
if ($tab[$j] == $NomGuichet)
{
$formguichet->populate($DonneeFormulaire);
//$Requette_Guichet_Model->EnregistreGuichet($NomGuichet); // appale de la methode enregistrement_guichet pour l_ajout dans la base de donne
//$this->_helper->redirector('index'); // redirection vers la page index
}
else
{
//$formguichet->populate($DonneeFormulaire);
$Requette_Guichet_Model->EnregistreGuichet($NomGuichet); // appale de la methode enregistrement_guichet pour l_ajout dans la base de donne
$this->_helper->redirector('index'); // redirection vers la page index
}
}


*/

//}


/*
$tab = $Requette_Guichet_Model->fetchAll();
$NbreData = mysql_num_rows($tab); $i=0;

foreach($tab as $colonne)
{

if ($tab[$colonne]==$NomGuichet)
{
$formguichet->populate($DonneeFormulaire);

}

else {
$Requette_Guichet_Model->EnregistreGuichet($NomGuichet); // appale de la methode enregistrement_guichet pour l_ajout dans la base de donne
$this->_helper->redirector('index'); // redirection vers la page index

}

}*/


}
else
{
$formguichet->populate($DonneeFormulaire); // si les donné ne sous pas valide nous remplissons les donne avec les valeur remplis précedent et nous lui reaffichons
}
}



}



Le modelle

class Application_Model_DbTable_Guichet extends Zend_Db_Table_Abstract
{

protected $_name = 'guichet';

public function EnregistreGuichet($Nom_guichet)
{

$options = array(
Zend_Db::AUTO_QUOTE_IDENTIFIERS => false
);

$params = array(
'host' => 'localhost',
'username' => 'root',
'password' => '',
'dbname' => 'memoirefinetude',
'options' => $options
);

$db = Zend_Db::factory('Pdo_Mysql', $params);

$donne array('ID_GUICHET'> "", 'NOM_GUICHET' => $Nom_guichet);
$db->insert('guichet', $donne);
//echo $db->getConnection()->getAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY);

//$donne array('ID_GUICHET'> NULL, 'NOM_GUICHET' => $Nom_guichet);
//$this->insert($donne);

}
public function RechercheDonneDB($Nom_guichet)
{


$host = "localhost";
$user = "root";
$password = "";
$base = "memoirefinetude";
// connection a la base de donnée
$mysqlconnection = new mysqli($host,$user,$password );

$basedonne = $mysqlconnection->select_db($base);

$requete="SELECT NOM_GUICHET from guichet where = '$Nom_guichet'";
// $result=$mysqlconnection->query($requete);
// return $result->toArray();

// retrouve la première colonne de résultat
// $result = $mysqlconnection->fetchCol("SELECT NOM_GUICHET from guichet",
// array('NOM_GUICHET' => 'Sir')
// );

// $sql = 'SELECT bug_id, bug_description, bug_status FROM bugs';

$stmt = $mysqlconnection->query($requete);

// $NOM_GUICHET = $stmt->fetchColumn(1);
// return $NOM_GUICHET->toArray();

$NOM_GUICHET = $stmt->fetchObject();
return $NOM_GUICHET->NOM_GUICHET;

}


public function liste_guichet($id_guichet)
{
$id_guichet= (int) $id_guichet;
$colonne = $this->fetchRow('ID_GUICHET=' .$id_guichet);

return $colonne->toArray();

}


Voici le formulaire



class Application_Form_Formulaireenregistrementguichet extends Zend_Form
{

public function init()
{
/* Form Elements & Other Definitions Here ... */

$this->setName("guichet");
$id = new Zend_Form_Element_Hidden('ID_GUICHET');
$id->addFilter('Int');
$nomguichet = new Zend_Form_Element_Text('NOM_GUICHET');
$nomguichet->setLabel('Nom Guichet')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$initialise = new Zend_Form_Element_Reset("effacer");
$initialise->setName("Annuler");
$submit = new Zend_Form_Element_Submit('submit');
$submit->setAttrib('id', 'submitbutton');
$this->addElements(array($id, $nomguichet , $submit, $initialise));




}


}