Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Acl & Zend_Auth
Zend_Acl & Zend_Auth Forum d'entraide pour les composants Zend_Acl & Zend_Auth du Zend Framework (contrôle d'accès, gestion des droits, authentification, etc.). Avant de poster -> Cours Zend_Acl et Zend_Auth.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/10/2011, 17h17   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 20
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 20
Points : 0
Points : 0
Par défaut zend framework 1.11 et implementation de zend_acl

Bonjour à tous,

j'avance pas à pas sur le Zend framework et me voilà bloqué sur la mise en place des ACL (j'ai pioché de l'information à droite à gauche mais à chaque fois je déchante).

Mon problème réside dans la mise en place des éléments fournis par Janitrix au sein de ma propre structure (voici le post que j'essaye de réaliser Tuto)

Pour la classe fournie (Inuitech_Janitrix_Acl), ça me parait claire
A ce que j'ai compris, le nom de la classe définit également son emplacement, dans mon appli la classe se nomme : Lib_Application_Resource_Acl et se trouve donc dans : library/Lib/Application/Resource/Acl.php
Ensuite j'ai juste adapté le code (role et ressource) à mon application.

Par contre, mon problème c'est pour le plugin, il est dit de le placer dans le bootstrap, mais pour moi cette notion est confuse, ce n'est pas clair.

Première question :
Dans mon appli il existe un fichier bootstrap.php qui se trouve dans le dossier application, il contient les lignes suivantes :

Code :
1
2
3
4
5
 
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
Est-ce cela dont on parle ?

Dans ce cas dois-je mettre le code du plugin dessous ? Du genre :

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
 
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
 // vide
}
 
/**
 * Plugin qui vérifie les droits d'accès de la session en cours
 * à la page demandée.
 *
 * @copyright  2008 Gabriel Malkas
 * @license    "New" BSD License
 */
class Inuitech_Acl_Plugin extends Zend_Controller_Plugin_Abstract
{
 
    private $_auth = null;
    private $_acl = null;
 
 
    public function __construct($auth, $acl)
    {
        $this->_auth = $auth;
        $this->_acl = $acl;
    }
 
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
 
        $role = 'visiteur';
 
        if ($this->_auth->hasIdentity()) {
            $role = $this->_auth->getIdentity()->role;
        }
 
        $controller = $request->controller;
        $action     = $request->action;
        $module     = $request->module;
        $resource   = $this->_acl->has($controller) ? $controller : null;
 
        if (!$this->_acl->isAllowed($role, $resource, $action)) {
            $request->setControllerName('Error');
            $request->setActionName('deny');
        }
 
    }
 
}
Deuxième question :
Ensuite il dit, j'ajoute le plugin au front controller, du coup qu'appelle t'il le front-controller, public/index.php sinon quel fichier est-ce ?

Troisième question :
Comment ajoute-t-on le plugin au front controller ?
J'ai lu ça :
Code :
1
2
3
4
 
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Inuitech_Acl_Plugin());
$front->dispatch();
Est-ce suffisant ? Dois-je placer le code ci-dessus sous le code suivant, ou cela n'a pas d'importance :
Code :
1
2
 
$application->boostrap()->run();
Voilà, les points sur lesquels je bute, il est vrai que toutes ces notions sont décrites dans plusieurs tuto sur le web, mais il y a toujours une zone d'ombre qui m'empêche d'aller au bout.

Je vous remercie d'avance pour vos réponses.
supertotal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2011, 17h42   #2
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 250
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 250
Points : 197
Points : 197
Je suis feignant et j'ai la flemme de tout lire

Pour ajouter un plugin il faut ajouter cette ligne dans ton application.ini
Code :
resources.frontController.plugins.nomDuPlugins="My_Plugins_NomDuPlugins"
Pour tes autres questions tu devrais lire la doc pour comprendre ce qu'est le frontController, etc

Bonne journée
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 09h04   #3
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2011
Messages : 75
Points : 264
Points : 264
Bonjour,
Citation:
Envoyé par shadypierre Voir le message
Je suis feignant et j'ai la flemme de tout lire
Hum, un peu pareil...
qq remarques qui pourront t'aider:
normes de nommage dans zend:
si tu as un nom de classe du style: cela veut dire que dans ton dossier library, tu as

Code :
1
2
3
4
5
-library
      -Inuitech
            -Acl
                   Plugin.php
      +Zend
ou Inuitech serait le dossier où tu ranges tes classes perso. Pour que l'autoloader de Zend puisse marcher, il faut en effet enregistrer ton dossier de classes persos dans le fichier application.ini (pour que Zend puisse transformer
en "charge la classe qui se trouve dans library/Inuitech/Acl/Plugin.php)
code à rajouter dans application.ini
Code :
autoloadernamespaces.inuitech  = "Inuitech_"
le bootstrap, c'est avant tout ton fichier index.php.
Voilà par exemple à quoi ressemble ce que je mets dans le mien pour les autorisations d'accès:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
/************* gestion des accès aux ressources ********************************/
$front = Zend_Controller_Front::getInstance();
//lecture d'acl.ini et création des Acl
// je mets mes controles d'accès dans un fichier.ini
$acl_ini = APPLICATION_PATH .'/configs/acl.ini' ;
$acl     = new My_Acl_Ini($acl_ini) ;
Zend_Registry::set('acl', $acl);
// enregistrement du pluggin
$front->registerPlugin(new My_Controller_Plugin_Auth($acl)) ;
/*********************************************************************/
// il faut absolument que ton code pour les acl soit avant le run() de l'appli
$application->bootstrap()
            ->run();
il faut absolument que ton code pour les acl soit avant le run() de l'appli, car ta fonction preDispatch doit agir avant la redirection sur tel ou tel contrôleur ou tel ou tel action (l'intérêt même des acl) pour savoir si tu es autorisé à y avoir accès ou pas...
peut-être ce tuto pourra t'aider à approfondir tes recherches
__________________
My laptop, my bike and my double-sticks...
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 09h59   #4
Invité de passage
 
Inscription : septembre 2008
Messages : 20
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 20
Points : 0
Points : 0
Grand merci pour vos réponses.

en piochant des bribes d'informations à droite à gauche, je commence à avoir l'ensemble du puzzle.
La documentation pour ma part n'est pas toujours des plus abordables, je reste parfois sur ma faim lorsque je veux une réponse rapide et précise, ce que je trouve dommage.
Je n'exclus pas le fait que je puisse comprendre difficilement ;-)

Merci pour vos orientations, je décrirais plus tard la méthode que j'ai utilisé pour arriver au bout de mon soucis.
supertotal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h54.


 
 
 
 
Partenaires

Hébergement Web