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 :

instanciation de la classe my_acl [ZF 1.8]


Sujet :

Zend_Acl & Zend_Auth PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Software engineer
    Inscrit en
    Août 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Software engineer

    Informations forums :
    Inscription : Août 2008
    Messages : 139
    Par défaut instanciation de la classe my_acl
    salut,
    j'essaie de realiser un petit exemple avec zend_auth et zend_acl

    le plugin pour le controle d'acces est le suivant :
    /auth/application/controllers/Plugin_Acl_Auth.php :
    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
    class Plugin_Acl_Auth extends Zend_Controller_Plugin_Abstract {
      private $_acl = null;
     
      public function __construct(Zend_Acl $acl) {
        $this->_acl = $acl;
        /*
        $front = Zend_Controller_Front::getInstance();
    	$acl = new Auth_Acl();
    	$front->registerPlugin(new Plugin_Acl_Auth($acl));
    	*/
      }
     
      public function preDispatch(Zend_Controller_Request_Abstract $request) {
        //As in the earlier example, authed users will have the role user
        $role = (Zend_Auth::getInstance()->hasIdentity()) ? 'administrateur' : 'invite';
     
        //For this example, we will use the controller as the resource:
        $resource = $request->getControllerName();
     
        if(!$this->_acl->isAllowed($role, $resource)) {
          //If the user has no access we send him elsewhere by changing the request
          $request->setModuleName('default')
                  ->setControllerName('Auth')
                  ->setActionName('login');
        }
      }
    }
    la classe derivé de zend_acl est la suivante :
    /auth/application/controllers/Auth_Acl.php :
    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
    <?php
    class Auth_Acl extends Zend_Acl {
      public function __construct() {
     
        $this->addRole(new Zend_Acl_Role('administrateur'));
     
        $this->addRole(new Zend_Acl_Role('invite'));
     
        $this->add(new Zend_Acl_Resource('index'));
     
        $this->allow('adminitrateur','index');
     
        $this->deny('invite','index');
      }
    }
    a propos de l'emplacement de ces deux fichiers, je vois que c'est la meilleur pour que zend detecte la classe Auth_Acl ,ce qui pose mon 1er probleme

    mon probleme est exactement dans ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $front = Zend_Controller_Front::getInstance();
    $acl = new Auth_Acl();
    $front->registerPlugin(new Plugin_Acl_Auth($acl));
    où le mettre ?
    mes tentatives sont :
    -dans le bootstrap ,mais apparement a ce moment l'autoloader n'est pas encore chargé pour pouvoir charger la classe Auth_Acl qui étend zend_acl .
    -dans le index.php mais sans succes aussi .

    ===> la classe est reconnu(cad pas de message d'erreur "class Auth_Acl not found") seulement si je met le bout de code dans le plugin (comme vous le voyez en commentaire) .je vois que c'est bizarre de faire registerPlugin dans le constructeur de plugin lui meme.

    le 2eme probleme est :
    quand ce code doit etre exécuté par rapport a tout le processus ?
    j'ai lu plusieurs docs mais j'ai pas encore bien assimilé le fonctionnement interne de zend .
    si quelqu'un peut m'aider pour comprendre les details du processus dés la reception de la requete jusqu'a l'envoie de la page au client , s'il y a meme un lien expliquant ça en detail je suis preneur .

    merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 74
    Par défaut
    Je peux déjà répondre à ton deuxième problème : Ce schéma m'a été très utile personnellement.

    Schéma + explications

  3. #3
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Comment teste-tu que ton My_Acl est bien chargé ?

    Personnellement je l'instancie dans l'index.php et cela marche parfaitement. Tu as un message d'erreur quand tu fais ça ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Software engineer
    Inscrit en
    Août 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Software engineer

    Informations forums :
    Inscription : Août 2008
    Messages : 139
    Par défaut
    merci

    si je le met dans index.php zend ne peut plus voir la classe Auth_Acl
    message d'erreur :
    Fatal error: Class 'Auth_Acl' not found in D:\wamp\www\eclipse\auth\public\index.php on line 29.

    merci _IpC_ ,j'ai deja vu ce lien quand je vient de decouvrir zend, j'ai dit "c'est du chinois" :d , mais maintenant je crois que je dois donner de l'impotance a ce shema .

  5. #5
    Membre confirmé
    Homme Profil pro
    Software engineer
    Inscrit en
    Août 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Software engineer

    Informations forums :
    Inscription : Août 2008
    Messages : 139
    Par défaut
    merci en tout cas ,

    la solution :

    l'emplacement :
    /auth/library/My/PluginAclAuth.php
    /auth/library/My/Acl.php

    dans le "/auth/application/Bootstrap.php" je cree une fonction _initAcl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	function _initAcl()
    	{
    		$front = Zend_Controller_Front::getInstance();
    		$acl = new My_Acl();
    		$front->registerPlugin(new My_PluginAclAuth($acl));
    	}
    Dans le fichier application.ini je dois rajouter la ligne suivante :
    autoloaderNamespaces[] = "My_"

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 74
    Par défaut
    Pour le schéma, c'est un diagramme de séquence (UML). Il défini bien les étapes de tout le routage et du chargement des plugins, qui appelle quoi, et dans quel ordre très utile, essaye de le comprendre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Instanciation d'une classe dans un CustomTag
    Par santana2006 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 30/09/2006, 12h08
  2. Réponses: 2
    Dernier message: 21/04/2006, 20h18
  3. instanciation d'une classe
    Par firejocker dans le forum C++
    Réponses: 6
    Dernier message: 15/11/2005, 11h54
  4. Réponses: 7
    Dernier message: 10/11/2005, 10h09
  5. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07

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