IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Acl & Zend_Auth PHP Discussion :

zend framework 1.11 et implementation de zend_acl


Sujet :

Zend_Acl & Zend_Auth PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Points : 28
    Points
    28
    Par défaut zend framework 1.11 et implementation de zend_acl
    Bonjour à tous,

    j'avance pas à pas sur le Zend framework et me voilà bloqué sur la mise en place des ACL (j'ai pioché de l'information à droite à gauche mais à chaque fois je déchante).

    Mon problème réside dans la mise en place des éléments fournis par Janitrix au sein de ma propre structure (voici le post que j'essaye de réaliser Tuto)

    Pour la classe fournie (Inuitech_Janitrix_Acl), ça me parait claire
    A ce que j'ai compris, le nom de la classe définit également son emplacement, dans mon appli la classe se nomme : Lib_Application_Resource_Acl et se trouve donc dans : library/Lib/Application/Resource/Acl.php
    Ensuite j'ai juste adapté le code (role et ressource) à mon application.

    Par contre, mon problème c'est pour le plugin, il est dit de le placer dans le bootstrap, mais pour moi cette notion est confuse, ce n'est pas clair.

    Première question :
    Dans mon appli il existe un fichier bootstrap.php qui se trouve dans le dossier application, il contient les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    }
    Est-ce cela dont on parle ?

    Dans ce cas dois-je mettre le code du plugin dessous ? Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <?php
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
     // vide
    }
     
    /**
     * Plugin qui vérifie les droits d'accès de la session en cours
     * à la page demandée.
     *
     * @copyright  2008 Gabriel Malkas
     * @license    "New" BSD License
     */
    class Inuitech_Acl_Plugin extends Zend_Controller_Plugin_Abstract
    {
     
        private $_auth = null;
        private $_acl = null;
     
     
        public function __construct($auth, $acl)
        {
            $this->_auth = $auth;
            $this->_acl = $acl;
        }
     
        public function preDispatch(Zend_Controller_Request_Abstract $request)
        {
     
            $role = 'visiteur';
     
            if ($this->_auth->hasIdentity()) {
                $role = $this->_auth->getIdentity()->role;
            }
     
            $controller = $request->controller;
            $action     = $request->action;
            $module     = $request->module;
            $resource   = $this->_acl->has($controller) ? $controller : null;
     
            if (!$this->_acl->isAllowed($role, $resource, $action)) {
                $request->setControllerName('Error');
                $request->setActionName('deny');
            }
     
        }
     
    }
    Deuxième question :
    Ensuite il dit, j'ajoute le plugin au front controller, du coup qu'appelle t'il le front-controller, public/index.php sinon quel fichier est-ce ?

    Troisième question :
    Comment ajoute-t-on le plugin au front controller ?
    J'ai lu ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new Inuitech_Acl_Plugin());
    $front->dispatch();
    Est-ce suffisant ? Dois-je placer le code ci-dessus sous le code suivant, ou cela n'a pas d'importance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $application->boostrap()->run();
    Voilà, les points sur lesquels je bute, il est vrai que toutes ces notions sont décrites dans plusieurs tuto sur le web, mais il y a toujours une zone d'ombre qui m'empêche d'aller au bout.

    Je vous remercie d'avance pour vos réponses.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    278
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 278
    Points : 284
    Points
    284
    Par défaut
    Je suis feignant et j'ai la flemme de tout lire

    Pour ajouter un plugin il faut ajouter cette ligne dans ton application.ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resources.frontController.plugins.nomDuPlugins="My_Plugins_NomDuPlugins"
    Pour tes autres questions tu devrais lire la doc pour comprendre ce qu'est le frontController, etc

    Bonne journée

  3. #3
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    Citation Envoyé par shadypierre Voir le message
    Je suis feignant et j'ai la flemme de tout lire
    Hum, un peu pareil...
    qq remarques qui pourront t'aider:
    normes de nommage dans zend:
    si tu as un nom de classe du style: cela veut dire que dans ton dossier library, tu as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -library
          -Inuitech
                -Acl
                       Plugin.php
          +Zend
    ou Inuitech serait le dossier où tu ranges tes classes perso. Pour que l'autoloader de Zend puisse marcher, il faut en effet enregistrer ton dossier de classes persos dans le fichier application.ini (pour que Zend puisse transformer
    en "charge la classe qui se trouve dans library/Inuitech/Acl/Plugin.php)
    code à rajouter dans application.ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    autoloadernamespaces.inuitech  = "Inuitech_"
    le bootstrap, c'est avant tout ton fichier index.php.
    Voilà par exemple à quoi ressemble ce que je mets dans le mien pour les autorisations d'accès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /************* gestion des accès aux ressources ********************************/
    $front = Zend_Controller_Front::getInstance();
    //lecture d'acl.ini et création des Acl
    // je mets mes controles d'accès dans un fichier.ini
    $acl_ini = APPLICATION_PATH .'/configs/acl.ini' ;
    $acl     = new My_Acl_Ini($acl_ini) ;
    Zend_Registry::set('acl', $acl);
    // enregistrement du pluggin
    $front->registerPlugin(new My_Controller_Plugin_Auth($acl)) ;
    /*********************************************************************/
    // il faut absolument que ton code pour les acl soit avant le run() de l'appli
    $application->bootstrap()
                ->run();
    il faut absolument que ton code pour les acl soit avant le run() de l'appli, car ta fonction preDispatch doit agir avant la redirection sur tel ou tel contrôleur ou tel ou tel action (l'intérêt même des acl) pour savoir si tu es autorisé à y avoir accès ou pas...
    peut-être ce tuto pourra t'aider à approfondir tes recherches
    My daughter, my laptop, my bike and my double-sticks...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Grand merci pour vos réponses.

    en piochant des bribes d'informations à droite à gauche, je commence à avoir l'ensemble du puzzle.
    La documentation pour ma part n'est pas toujours des plus abordables, je reste parfois sur ma faim lorsque je veux une réponse rapide et précise, ce que je trouve dommage.
    Je n'exclus pas le fait que je puisse comprendre difficilement ;-)

    Merci pour vos orientations, je décrirais plus tard la méthode que j'ai utilisé pour arriver au bout de mon soucis.

Discussions similaires

  1. Zend Framework et URL Rewriting
    Par ToxiZz dans le forum MVC
    Réponses: 1
    Dernier message: 19/04/2006, 11h25
  2. [PHP5] PEAR vs ZEND Framework
    Par wdionysos dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 04/04/2006, 09h51
  3. Réponses: 3
    Dernier message: 02/04/2006, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo