Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 30-11-2010 17:31:32

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

[RESOLU]Débutant - Problème privilèges [1.11]

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

 

#2 02-12-2010 09:39:37

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [RESOLU]Débutant - Problème privilèges [1.11]

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

Code:

<?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 :

Code:

<?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 :

Code:

<?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

 

#3 02-12-2010 17:21:15

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [RESOLU]Débutant - Problème privilèges [1.11]

toujours aucune inspiration ? si vous avez des questions ou si il vous manque des éléments, demandez moi

Hors ligne

 

#4 03-12-2010 14:32:48

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [RESOLU]Débutant - Problème privilèges [1.11]

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

Code:

define("ROOT_URL","http://zfproject.localhost/zfproject/");

après

Code:

define("ROOT_URL","http://zfproject.localhost/");A bientôt.

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