Problème de reconnaissance de Plugin ACL
Bonjour,
je rouvre un nouveau sujet, à cause d'un nouveau problème.
j'utilise un plugin pour le contrôle des droits d'accès, mais je me retrouve avec cette erreur :
Code:
Fatal error: Class 'Default_Controller_Plugin_Acl' not found in /var/www/trinis.fourmi-tek.org/application/Bootstrap.php on line 37
mon architecture est construit de cette façon, peut être es-ce une erreur ?
Code:
1 2 3 4 5 6 7 8 9
|
--Application
-Controllers
-Authcontroller.php
-Acls
-MyAcl.php
-Plugins
-Acl.php
.... |
Le code de mon Plugin :
Code:
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
<?php
class Default_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
{
//tableau associatif reprenant les infos utilisées pour le lien
//si l'utilisateur n'est pas authentifié
private $_noauth = array(
'module' => 'default',
'controller' => 'login',
'action' => 'index'
);
//tableau associatif reprenant les infos utilisées pour le lien
//si l'utilisateur est authentifié mais qu'il n'a pas les droits d'accès
private $_noacl = array(
'module' => 'default',
'controller' => 'error',
'action' => 'deny'
);
//la méthode événementielle preDispatch(), définie par ZF, est exécutée
//avant qu'une action ne soit distribuée
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$acl = null;
$role = null;
//vérification de l'enregistrement de l'ACL (cf. application/acls/MyAcl.php)
if(Zend_Registry::isRegistered('My_Acl'))
{
//récupération de l'ACL
$acl = Zend_Registry::get('My_Acl');
}
else
{
throw new Zend_Controller_Exception("Acl not defined !");
}
//récupération de l'instance d'identification
//la classe Zend_Auth permet de définir les adaptateurs d'authentification
//un adpatateur permet de définir le service d'authentification,
//dans notre cas, une base de données
$auth = Zend_Auth::getInstance();
//permet de vérifier si une identité est correctement identifiée
if($auth->hasIdentity())
{
//récupération du role (via la database)
$role = $auth->getIdentity()->role;
}
else
{
//si l'utilisateur n'est pas authentifié
//on définit le rôle par défaut, guest
$role = 'guest';
}
//récupération du module, contrôleur et action demandés par la requête
//comme nous avons utilisé les contrôleurs comme ressource,
//nous stockons le contrôleur demandé dans la requête dans la variable $ressource
$module = $request->getModuleName();
$controller = $ressource = $request->getControllerName();
$action = $request->getActionName();
//vérification que le contrôleur est définit dans l'ACL
if(!$acl->has($controller))
{
$ressource = null;
}
//si l'accès n'est pas permis, nous allons modifier la requête
//en modifiant le module, le contrôleur et l'action
if(!$acl->isAllowed($role, $ressource, $action))
{
//si pas authentifié
if(!$auth->hasIdentity())
{
//$request->setParam('redirect', $module . '/' . $controller . '/' . $action);
$module = $this->_noauth['module'];
$controller = $this->_noauth['controller'];
$action = $this->_noauth['action'];
}
else
{
//si pas autorisé
$module = $this->_noacl['module'];
$controller = $this->_noacl['controller'];
$action = $this->_noacl['action'];
}
}
//définition des du module, du contrôleur et de l'action
//qui sera ùaintenant routée
//$request->setModuleName($module);
$request->setControllerName($controller);
$request->setActionName($action);
}
} |
Le code de mon bootstrap :
Code:
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
|
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initDoctype()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
}
protected function _initAutoloadRessource()
{
//configuration de l'Autoload
$ressourceLoader = new Zend_Loader_Autoloader_Resource(array(
'namespace' => 'Default',
'basePath' => dirname(__FILE__),
));
//permet d'indiquer les répertoires dans lesquels se trouveront nos classes:
//notamment, l'ACL et le pugin
$ressourceLoader->addResourceType('form', 'forms/', 'Form')
->addResourceType('acl', 'acls/', 'Acl')
->addResourceType('model', 'models/', 'Model')
->addResourceType('plugin', 'plugins/', 'Controller_Plugin');
return $ressourceLoader;
}
protected function _initAcl()
{
//Création d'une instance de notre ACL
$acl = new Default_Acl_MyAcl();
//enregistrement du plugin de manière à ce qu'il soit exécuté
Zend_Controller_Front::getInstance()->registerPlugin(new Default_Controller_Plugin_Acl());
//permet de définir l'acl par défaut à l'aide de vue, de cette manière
//l'ACL est accessible dans les vues
Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl);
//vérifie si une identité existe et applique le rôle
$auth = Zend_Auth::getInstance();
$role = (!$auth->hasIdentity()) ? 'guest' : $auth->getIdentity()->role;
}
} |
Merci de votre aide,
cordialement,
chocofusee,
PS : Merci de m'indiquer si je fait du double poste.