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)
<?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)
<?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.
<?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
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