Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-08-2011 23:31:35

Florian1987
Membre
Lieu: Garancières, Yvelines
Date d'inscription: 28-02-2010
Messages: 13

[Zend_Acl][1.11.9] - Ajout Roles et Resources (Tuto Julien Pauli)

Bonsoir,

Je suis actuellement en train d'essayer d'ajouter un système d'authentification et de contrôle d'accès aux ressources en me basant sur le tutoriel de Julien Pauli disponible à cette adresse : http://julien-pauli.developpez.com/tuto … er/aclmvc/

Cependant, j'ai quelques difficultés à mettre lors de l'appel de la classe My_Acl. En effet, lorsque j'ajoute les ressources depuis cette classe, elle ne sont pas récupérées par mon application alors que lorsque je copie ces instructions dans la classe JP_Acl, elles sont bien reconnues.

Voici les fichiers concernés :

Fichier My_Acl (Pour mon projet : App_Acl)

Code:

[lang=php]
<?php

class App_Acl extends FP_Acl
{
    protected function _init()
    {
        //    Ajout des Resources
        $this->addResource('index')
             ->addResource('auth')
             ->addResource('account')
             ->addResource('help')
             ->addResource('news');
        
        //    Ajout des Roles
        $this->addRole('member', 'guest')
             ->addRole('admin');
        
        //    Ajout des Privilèges
        $this->allow('admin');
        $this->allow('member', 'auth', 'logout');
        $this->allow('member', 'account', 'index');
        $this->allow('guest', 'auth', 'login');
        $this->allow('guest', 'auth', 'register');
        $this->allow('guest', 'help');
    }
}

Dans ce  fichier, la fonction _ini()  commentée fonctionne lorsque la classe est directement appelée au lieu de passer par la classe My_Acl (App_Acl).

Fichier JP_Acl (Dans mon projet : FP_Acl)

Code:

[lang=php]
<?php

class FP_Acl extends Zend_Acl
{
    protected static $_defaultRole = 'guest';
    protected static $_sessionNamespace = 'acl';
    protected static $_instance;
    protected static $_session;
    
    public static function setParams (array $params)
    {
        if (isset ($params['defaultRole']))
        {
            self::$_defaultRole = $params['defaultRole'];
        }
        if (isset ($params['sessionNamespace']))
        {
            self::$_sessionNamespace = $params['sessionNamespace'];
        }
    }
    
    public static function getInstance ($clearSession = false)
    {
        if (self::$_sessionNamespace !== null)
        {
            if ($clearSession)
            {
                Zend_Session::namespaceUnset(self::$_sessionNamespace);
            }
            self::$_session = new Zend_Session_Namespace(self::$_sessionNamespace);
            if (isset (self::$_session->acl))
            {
                self::$_instance = self::$_session->acl;
            }
            else
            {
                if (self::$_instance == null)
                {
                    self::$_instance = new self;
                }
            }
        }
        else
        {
            if (self::$_instance == null)
            {
                self::$_instance = new self;
            }
        }
        return self::$_instance;
    }
    
    final protected function __construct()
    {
        $this->addRole($this->getDefaultRole());
        $this->_init();
    }

    protected function _init() { }
    
    /*protected function _init()
    {
        //    Ajout des Resources
        $this->addResource('index')
             ->addResource('auth')
             ->addResource('account')
             ->addResource('help')
             ->addResource('news');
        
        //    Ajout des Roles
        $this->addRole('member', 'guest')
             ->addRole('admin');
        
        //    Ajout des Privilèges
        $this->allow('admin');
        $this->allow('member', 'auth', 'logout');
        $this->allow('member', 'account', 'index');
        $this->allow('guest', 'auth', 'login');
        $this->allow('guest', 'auth', 'register');
        $this->allow('guest', 'help');
    }*/


    public function getDefaultRole()
    {
        return self::$_defaultRole;
    }

    public function allow($roles = null, $resources = null, $privileges = null, Zend_Acl_Assert_Interface $assert = null)
    {
        $return = parent::allow($roles, $resources, $privileges, $assert);
        if (self::$_session !== null)
        {
            self::$_session->acl = $this;
        }
        return $return;
    }
    
    public function deny($roles = null, $resources = null, $privileges = null, Zend_Acl_Assert_Interface $assert = null)
    {
        $return = parent::deny($roles, $resources, $privileges, $assert);
        if (self::$_session !== null)
        {
            self::$_session->acl = $this;
        }
        return $return;
    }
}

Fichier IndexController utilisé pour tester la partie II du tutoriel.

Code:

[lang=php]
<?php

class IndexController extends Zend_Controller_Action
{

    public function init()
    {
    }

    public function indexAction()
    {
        $acl = App_Acl::getInstance();
        //$acl = FP_Acl::getInstance();
        FP_Db_Table_Row_AclRole::setAcl($acl);
        
        $this->view->acl = $acl;
        
        $users = new Application_Model_DbTable_Users();
        $user = $users->createRow();
        $user->username = 'Florian';
        $user->password = '020587';
        
        $result = $user->authenticate(1800);
        
        if (!$result->isValid())
        {
            exit('Problème Login ou Mot de Passe');
        }
        if ($acl->isAllowed($user, 'account', 'index'))
            echo "Allow";
        else echo "Deny";
    }

}

Merci d'avance pour l'aide que vous pourrez m'apporter. Si vous avez besoin d'informations complémentaires, n'hésitez pas à me le demander.

Florian

Hors ligne

 

#2 21-08-2011 17:33:24

Alcide_
Membre
Lieu: Brest
Date d'inscription: 20-03-2010
Messages: 31
Site web

Re: [Zend_Acl][1.11.9] - Ajout Roles et Resources (Tuto Julien Pauli)

A première vue, le code m'a l'air bon...
Je pense plutôt que le problème vient de ton namespace "App", l'as-tu déclaré ? tu l'utilises ailleurs dans ton projet ? ou c'est le seul endroit.

Hors ligne

 

#3 27-08-2011 12:17:19

Florian1987
Membre
Lieu: Garancières, Yvelines
Date d'inscription: 28-02-2010
Messages: 13

Re: [Zend_Acl][1.11.9] - Ajout Roles et Resources (Tuto Julien Pauli)

Merci pour ta réponse.

Donc j'ai bien déclaré mon namespace App dans mon fichier application.ini

application.ini

Code:

; Autoloader
autoloaderNamespaces[] = "App_"
autoloaderNamespaces[] = "FP_"
autoloaderNamespaces[] = "Zend_"

Bootstrap.php

Code:

[lang=php]
protected function _initAutoload()
{
    $loader = new Zend_Application_Module_Autoloader(array(
        'namespace'    =>    '',
        'basePath'    =>    APPLICATION_PATH
    ));
    return $loader;
}

Sinon, pour le moment, le namespace App n'est utilisé que pour le système ACL.

Dernière modification par Florian1987 (27-08-2011 12:22:05)

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