Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-05-2009 17:40:39

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

[resolu] acl : allow a tout un module.

Bonjour,

Depuis le début de l'apres midi je galère avec ce satanée plugIn d'Auth.
Je m'explique : je me suis rendu compte que j'avais mal fait ce plugIn et ca me bloquait l'utilisation de JCupload(un uploader en flash). Bref, je voudrais repartir à Zero et faire un plugIn Auth propre.

Mon appli est découpé en module


application/
               /admin
                        /controllers/authController
              /public/


Vous avez du comprendre : la partie publique est ouverte à tous, et pour la partie admin, seul la page d'idendification est permis pour un visiteur, pour le reste, on doit etre loggué.

J'ai pas de problème pour enregistrer le plugin au front.

Je vous montre mon code (avec des commentaires):

Ma classe Acl :

Code:

 class MyAcl extends Zend_Acl 
{
    public function __construct(Zend_Auth $auth)
    {
       

       //si j'ai bien compris, d'abord je défini les ressources, je défini donc les deux modules ?
        $this->add(new Zend_Acl_Resource('admin'));
        $this->add(new Zend_Acl_Resource('public'));

      
         
       //ensuite je défini les roles, ici un visiteur ne peut que voir tout le module public
        $this->addRole(new Zend_Acl_Role('visiteur')); 
        $this->allow('visiteur', 'public');
        


        //d'apres un autre post du forum, avec ces lignes je défini le role admin et je l'autorise a tout
        $this->addRole(new Zend_Acl_Role('admin')); 
        $this->allow('admin');


       //question ici, est-ce que je dois ecrire explicitement que la page /admin/auth/login est visible (pour quelqu'un qui voudrait se logguer.....?
       si oui, créer la ressource?
       l'autoriser a visiteur?


    }
}

(des questions sont dans les commentaires de ce code.

Bon ensuite mon plugInAuth d'apres un code trouvé sur le forum :

Code:

class MyPluginAuth extends Zend_Controller_Plugin_Abstract
{

    private $_auth;
    private $_acl;

//ici j'ai pas compris quelles étaient les subtilités entre les différentes redirection ...

    private $_login =array('module' => 'admin',
                            'controller' => 'auth',
                            'action' => 'login');

    private $_noauth = array('module' => 'public',
                            'controller' => 'index',
                            'action' => 'index');

    private $_noagreement = array('module' => 'admin',
                            'controller' => 'auth',
                            'action' => 'login');

    public function __construct($auth, $acl)
    {
        $this->_auth = $auth;
        $this->_acl = $acl;
    }
    
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        
        

        if ($this->_auth->hasIdentity()) {
            $role = $this->_auth->getStorage()->read()->role;
        } else {
            $role = 'visiteur';
        }
       
        $controller = $request->controller;
        $action = $request->action;
        $module = $request->module;
        $resource = $controller;
   
            
        if (!$this->_acl->has($resource)) {
            $resource = null;
        }

            // test session
            if (!$this->_auth->hasIdentity()) {
                // test si la première page
                if(($controller=='index')&&($module=='public')){
                    $module = $this->_login['module'];
                    $controller = $this->_login['controller'];
                    $action = $this->_login['action'];
                // si le login
                }else if(($controller!='login')&&($module!='public')){
                    $module = $this->_noauth['module'];
                    $controller = $this->_noauth['controller'];
                    $action = $this->_noauth['action'];
                }
            }else{
        
            
                if(!$this->_acl->isAllowed($role, $module, /*$controller,*/ $action)){
                    $module = $this->_noagreement['module'];
                    $controller = $this->_noagreement['controller'];
                    $action = $this->_noagreement['action'];
                }
            }

        $request->setModuleName($module);
        $request->setControllerName($controller);
        $request->setActionName($action);
    }
    
    
}

Un petit eclaircissement de votre part serait fantastique.

Par avance merci.

Dernière modification par gostbuster (29-05-2009 13:30:10)


Gostbuster - Développeur WEB

Hors ligne

 

#2 29-05-2009 09:17:52

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

Re: [resolu] acl : allow a tout un module.

Je me permets de vous relancer, je vois qu'il y a eu 22 lecteurs, personne ne sait ?

Merci bien.


Gostbuster - Développeur WEB

Hors ligne

 

#3 29-05-2009 09:59:49

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

Re: [resolu] acl : allow a tout un module.

J'avance un peu mais je ne comprends pas tout.

j'ai bien défini mes deux roles : visiteur et admin

et pour résumer :

visiteur à droit à tout le module public, ainsi que la page d'authentification admin/auth/login
admin a droit à tout.

là où je galère c'est pour attribuer une ressource.
Il n'y a pas moyen de créer une ressource qui correspond au module entier ?

Code:

 $this->add(new Zend_Acl_Resource('public'));

où 'public', correspond au module a part entiere ?

pour ensuite faire

Code:

 $this->allow(nom_du_role,nom_du_module);

Par avance merci.


Gostbuster - Développeur WEB

Hors ligne

 

#4 29-05-2009 10:05:06

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: [resolu] acl : allow a tout un module.

Biensur que tu peux, c'est toi qui définis ce que toi être une ressource ( module , ou module + controller, ou autre)

Il faut juste que ça corrresponde aussi dans ton plugin qui vérifie les droits (plugInAuth).
Relis ton plugin auth, tu devrais voir à quoi correspond ta ressource dans celui ci....


Société : Direct Info Service

Hors ligne

 

#5 29-05-2009 10:09:58

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

Re: [resolu] acl : allow a tout un module.

Salut yannux, et merci pour ta réponse. Je viens de piger. Et donc, si l'utilisateur n'est pas autorisé, il tombera sur l'url qu'on a defini dans le plug in, c'est à dire l'url d'authentification.

Merci beaucoup en tout cas!


Gostbuster - Développeur WEB

Hors ligne

 

#6 29-05-2009 10:20:57

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: [resolu] acl : allow a tout un module.

Oki good.

Relis bien le code de ce que tu copier colle..  ça aide à comprendre wink


Société : Direct Info Service

Hors ligne

 

#7 29-05-2009 13:29:54

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

Re: [resolu] acl : allow a tout un module.

Ouais, j'ai tout compris, ca marche maintenant.

merci


Gostbuster - Développeur WEB

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages