Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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)
[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)
[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.
[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
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
Merci pour ta réponse.
Donc j'ai bien déclaré mon namespace App dans mon fichier application.ini
application.ini
; Autoloader autoloaderNamespaces[] = "App_" autoloaderNamespaces[] = "FP_" autoloaderNamespaces[] = "Zend_"
Bootstrap.php
[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
Pages: 1