Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-07-2008 17:14:37

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

[Résolu] ACL et structure modulaire

Bonjour,

Pour les ACL, j'avais retenu la chose comme ceci :

* - un role : guest, user, admin, ...
* - une ressource : controller
* - un privilège : action

Mais quand on a une structure modulaire, je suppose qu'il faut bien prendre en compte le module quelque part, mais comment ?

Merci smile

Dernière modification par Mr.MoOx (03-07-2008 13:51:25)

Hors ligne

 

#2 02-07-2008 17:43:48

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Résolu] ACL et structure modulaire

Dites moi si c'est la bonne (une des façons ?) de faire :

Dans mon plugin :

Code:

$privilege = $request->getControllerName() . "_" . $request->getActionName();
$resource = $request->getModuleName();

Et dans mes ACL, je mets donc le module en tant que ressource et dans les privilèges, je met le combo controller_action.

Hors ligne

 

#3 03-07-2008 10:25:29

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] ACL et structure modulaire

Moi j'ai plutot module_controller puis action

Code:

//recup de la ressource en cours
        $controller = $request->getControllerName();
        $action = $request->getActionName();
        $module = $request->getModuleName();
        if ($module!='default') {
            $resource = $module.'_'.$controller;
        } else {
            $resource = $controller;
        }

        //test de la ressources
        if (!$this->_acl->has($resource)) {
            $resource = null;
        }

        //test de l'acces
        if (!$this->_acl->isAllowed($role, $resource, $action)) {
//...

Hors ligne

 

#4 03-07-2008 10:51:26

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Résolu] ACL et structure modulaire

Yep d'accord, merci Mr. MoOx smile

Donc ma façon de faire est correct, c'est cool.

Hors ligne

 

#5 10-07-2009 16:43:33

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu] ACL et structure modulaire

Moi je procède plutôt comme suit:

Code:

...
$acl->add(new Zend_Acl_Resource('user_index'));
$acl->add(new Zend_Acl_Resource('admin_index'));

$acl->allow('guest', 'user_index');
$acl->allow('admin', 'admin_index');

$acl->allow('admin');
return $acl;
...

Mais il ne reconnait pas le séparateur "_" pour faire la différence entre un module et un controller

Il va me sortir cette erreur lorsque je s'esseye d'accéder au IndexControlelr de l'admin ou du user:

Code:

Message: Resource 'index' not found

Request Parameters:

array(3) {
  ["module"]=>
  string(5) "admin"
  ["controller"]=>
  string(5) "index"
  ["action"]=>
  string(5) "index"
}

J'utilise l'aborescence modulaire proposé par Zend : http://framework.zend.com/manual/en/zen … dular.html

Dernière modification par probitaille (10-07-2009 16:51:09)

Hors ligne

 

#6 10-07-2009 17:00:10

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu] ACL et structure modulaire

C'est a toi de concatener le nom du module et du controller avant ton test sur la resource


----
Gruiiik !

Hors ligne

 

#7 10-07-2009 17:11:13

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu] ACL et structure modulaire

Mes controllers sont déjà nommer comme ceci:

Code:

class Admin_IndexController extends Zend_Controller_Action

Mais toi tu me dis que je dois concatener le nom du module avant ?

C'est à dire, déclarer une variable en faisant une sorte de :

$privilege = $request->getControllerName() . "_" . $request->getActionName() comme plus haut ??

Merci !

Dernière modification par probitaille (10-07-2009 17:14:37)

Hors ligne

 

#8 10-07-2009 20:25:58

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu] ACL et structure modulaire

Code:

$acl->add(new Zend_Acl_Resource('user'));
    $acl->add(new Zend_Acl_Resource('admin'));
    $acl->add(new Zend_Acl_Resource('index'), 'user');
    $acl->add(new Zend_Acl_Resource('index'), 'admin'); ------> Error : id 'index' already declared.

Et ceci:

Code:

    $acl->add(new Zend_Acl_Resource('user'));
    $acl->add(new Zend_Acl_Resource('admin'));
    $acl->add(new Zend_Acl_Resource('user_index'), 'user');   ----> Error : Resource 'index' not found.
    $acl->add(new Zend_Acl_Resource('admin_index'), 'admin');

Dernière modification par probitaille (10-07-2009 20:45:24)

Hors ligne

 

#9 19-08-2009 15:03:42

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Re: [Résolu] ACL et structure modulaire

Salut probitaille,

Je ne sais pas si tu as trouver une solution a ton problème :

Code:

$acl->add(new Zend_Acl_Resource('index'), 'admin'); ------> Error : id 'index' already declared.
$acl->add(new Zend_Acl_Resource('user_index'), 'user');   ----> Error : Resource 'index' not found.

Mais moi j'ai eu le même bug que toi et je l'ai résolu comme ça :

Au lieu de faire :

Code:

$acl->add(new Zend_Acl_Resource('admin'));
    $acl->add(new Zend_Acl_Resource('index'), 'user');
    $acl->add(new Zend_Acl_Resource('index'), 'admin'); ------> Error : id 'index' already declared.

J'ai fait  :

Code:

$acl->add(new Zend_Acl_Resource('Users'));------>défini ma ressource(controller) 

Ensuite : 

je bloque l'accès à tout le monde

//Deny
$this->deny('guest', 'Users');

Enfin : 

j'autorise l'accès aux rôles que je veux
$this->allow('client', 'Users', array('index','update'));

$this->allow('clientPlus', 'Users', array('delete','register'));

Voila comment j'ai fait pour palier au bug/problème/erreur.

Si tu as une meilleurs solution je suis preneur

Bon Code....!


A+ Guelo Super Star

Hors ligne

 

#10 19-08-2009 15:30:07

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu] ACL et structure modulaire

Merci de ta réponse, en fait moi le code fonctionne maintenant de cette façon:

Code:

$acl->addRole(new Zend_Acl_Role('guest'));
$acl->addRole(new Zend_Acl_Role('admin'));

$acl->add(new Zend_Acl_Resource('admin'));
$acl->add(new Zend_Acl_Resource('admin_index'),'admin');
$acl->add(new Zend_Acl_Resource('admin_who'),'admin');
$acl->add(new Zend_Acl_Resource('admin_where'),'admin');

Par contre, pour qui détected bien le admin_ comme un module, il faut bien structurer sont projet

applications
-admin
--controllers
--views
-user
--controllers
--views

Et s'assurer d'avoir un truc semblable dans le bootstrap

Code:

    protected function _initFrontcontroller() {
        // Récupération d'une instance du controleur frontal (singleton)
        $frontController = Zend_Controller_Front::getInstance();
        
        //$frontController->addModuleDirectory(APPLICATION_PATH);
        // Définition du répertoire de modules
        $frontController->setControllerDirectory(array(
            'default' => APPLICATION_PATH .'/user/controllers/',
            'adminGalleries' => APPLICATION_PATH .'/adminGalleries/controllers/',
            'admin'    => APPLICATION_PATH .'/admin/controllers/'
        ));
        
       // $frontController->addControllerDirectory(APPLICATION_PATH . '/admin/controllers','admin');
        

        $frontController->registerPlugin(new Default_Model_AccessPlugin(), 1);
        //echo APPLICATION_PATH.'---';
        return $frontController;
    }

Cela fait déjà un bon moment, peut-être qu'il y avait autre chose à régler mais je ne crois pas, je me souviens pas très bien. J'espère que cela peut aider.

Dernière modification par probitaille (19-08-2009 15:37:38)

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