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