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 :

ACL : comportement étrange


Sujet :

Zend_Acl & Zend_Auth PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 84
    Points : 80
    Points
    80
    Par défaut ACL : comportement étrange
    Bonjour à tous,

    Je débute avec ZF et je rencontre pas mal de difficultés sur l'installation d'un système Auth/ACL.

    J'ai suivi ce tuto, mais ce post, et celui-là m'ont fait avancer plus vite.

    Mon problème
    Le système ACL n'en fait qu'à sa tête ! Avec le code ci-dessous, lorsque je ne suis pas identifié (rôle "unknown"), j'ai accès à toutes les actions de tous controleurs, sans restriction.

    On pourrait penser que mon ACL n'est pas "branché", mais lorsque je place un "$this->deny('unknown');", tout est bloqué comme il faut.

    En résumé, soit j'ai accès à tout, soit à rien. Pas de juste milieu, ennuyeux...

    Merci pour votre aide !


    La Classe :
    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
    class My_Class_Acl extends Zend_Acl
      {
        public function __construct(Zend_Auth $auth)
        {
          // Définition des Controllers concernés par l'authentification.
          $this->add(new Zend_Acl_Resource('Auth'));
          $this->add(new Zend_Acl_Resource('Index'));
          $this->add(new Zend_Acl_Resource('Contributions'));
          $this->add(new Zend_Acl_Resource('Events'));
          $this->add(new Zend_Acl_Resource('People'));
     
          // Définition des rôles.
          $this->addRole(new Zend_Acl_Role('unknown'));
          $this->addRole(new Zend_Acl_Role('guest'));
          $this->addRole(new Zend_Acl_Role('member'), 'guest');
          $this->addRole(new Zend_Acl_Role('admin'), 'member');
     
          // Définition des droits.
          $this->allow('unknown');
          $this->deny('unknown', 'Contributions');
          $this->deny('unknown', 'Events');
          $this->deny('unknown', 'People');
     
          $this->allow('guest');
          $this->deny('guest', 'Contributions');
          $this->deny('guest', 'Events');
          $this->deny('guest', 'People');
     
          $this->allow('member');
          $this->deny('member', 'Contributions');
          $this->deny('member', 'Index', 'add');
          $this->deny('member', 'Index', 'edit');
          $this->deny('member', 'Index', 'delete');
     
          $this->allow('admin');
     
        }
      }
    Le fameux plugin Janitrix
    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
    50
    51
    52
    <?php
     
      /**
       * Ce fichier contient la classe Inuitech_Acl_Plugin.
       *
       * @copyright  2008 Gabriel Malkas
       * @license    "New" BSD License
      */
     
      /**
       * 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 My_Plugin_Acl 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 = 'unknown';
     
          if ($this->_auth->hasIdentity()) {
              $role = $this->_auth->getIdentity()->role;
          }
     
          $_SESSION['toto'] = $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');
          }
     
        }
     
    }
    Puis le morceau de bootstrap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Création de l'objet Auth
      $auth = Zend_Auth::getInstance();
     
      // Création de l'objet Acl
      $acl = new My_Class_Acl($auth);
     
     
      // Mise en place du controleur.
      $frontController = Zend_Controller_Front::getInstance();
      $frontController->throwExceptions(true);
      $frontController->setControllerDirectory('./application/controllers');
      $frontController->registerPlugin(new My_Plugin_Acl($auth, $acl));
      Zend_Layout::startMvc(array('layoutPath'=>'./application/layouts'));

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Tu peux essayer sans mettre de majuscules dans les noms de ressources ?

    Si ça ne fonctionne pas, essaie de débugguer en regardant les valeurs de $role, $resource et $action dans le plugin de Janitrix (soit en faisant un var_dump, soit en utilisant les fonctionnalités du framework comme Zend_Debug)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 84
    Points : 80
    Points
    80
    Par défaut
    Bien joué, c'était les majuscules...
    Tout fonctionne désormais à merveille. Me sens un peu idiot

    Bon dimanche.

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

Discussions similaires

  1. [Forms6i] Un IF-ELSIF au comportement étrange
    Par lafouine dans le forum Forms
    Réponses: 11
    Dernier message: 13/09/2005, 15h40
  2. Comportement étrange apres une désinstallation
    Par Sunchaser dans le forum Excel
    Réponses: 4
    Dernier message: 06/08/2005, 19h44
  3. comportement étrange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 10/02/2005, 21h27
  4. [Système][Runtime][Exec] Comportement étrange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2004, 09h54
  5. Réponses: 2
    Dernier message: 22/09/2003, 11h23

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