Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Voilà, j'esseye de faire mon projet le mieux organisé possible et le plus standard possible. Par contre, je suis face à un problème pour attribuer l'autorisation à mes controllers. J'ai 2 dossiers général dans application soit User et Admin qui comporte chacun un IndexController.
Admin
---IndexController
---GestionController
User
---IndexController
---NouvelleController
---AutresController...
Seulement, lorsque je donne le nom des controllers autorisé à l'utilisateur, je donne la permission au user d'aller sur l'index mais j'aimerais préciser un peu plus, le permettre d'aller sur l'indexController du dossier user seulement. Est-ce possible sans changer le nom de mes controllers ?
Merci
// define our possible user groups $acl->addRole(new Zend_Acl_Role('guest')); $acl->addRole(new Zend_Acl_Role('admin')); // define our controllers as resources. $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('login')); $acl->add(new Zend_Acl_Resource('admin')); // define our access rules $acl->allow('admin', 'admin'); $acl->allow('guest', 'index'); <----- Je veux ici le index du dossier User $acl->allow('guest', 'login'); // admins can get to everything $acl->allow('admin'); return $acl;
Dernière modification par probitaille (07-07-2009 22:18:24)
Hors ligne
Un petit up
Hors ligne
En suposant que User et Admin sont des modules:
//en général (préciser l'action est facultative) $acl->add(new Zend_Acl_Resource($module."/".$controller, $action)); //dans ton cas $acl->add(new Zend_Acl_Resource("users/index")); $acl->allow('guest', 'users/index');
Hors ligne
Bonjour,
Je me demande si la syntaxe suivant ne fonctionne pas aussi:
$acl->add(new Zend_Acl_Resource('User_Index'));
A tester, je ne suis pas sûr du tout.
A+ benjamin.
Hors ligne
Ouais, j'y avais pensé de cette façon là...mais comment définir le séparateur car du coup, si je change:
$acl->add(new Zend_Acl_Resource('index'));
pour:
$acl->add(new Zend_Acl_Resource('user/index'));
Il ne reconnait plus la ressource --> Message: Resource 'index' not found
Et ce autant pour le module admin et tous les controllers, comme s'il lisait "user/index' comme étant un controller en soi mais je n'ai pas pu vérifier.
J'ai cru à un problème de déclaration des modules mais je ne crois pas:
// Définition du répertoire de modules $frontController->setControllerDirectory(array( 'default' => APPLICATION_PATH .'/user/controllers/' )); $frontController->addControllerDirectory(APPLICATION_PATH . '/admin/controllers','admin');
EDIT:
En même temps, avec une application modulaire, sommes nous oubligé de nommé nos controllers de cette façon car autrement moi cela ne fonctionne pas : class Admin_IndexController extends Zend_Controller_Action
Dernière modification par probitaille (08-07-2009 15:32:18)
Hors ligne
Il ne s'agit pas d'un simple séparateur.
Dans les conventions PEAR/Zend, "User_Index" veut bien dire qu'il s'agit du controlleur Index du module User.
Ce n'est pas tout à fait la même chose que "user/index", puisque "User_IndexController" pourrait très bien se trouver dans le dossier "truc/index" (ce qui ne répondrait biensûr plus aux conventions pour lesquelles "_" signifie un noeud dans l'arborescence des dossiers, c'est pour appuyer mes propos).
Il faut à mon avis bien définir ses différents modules au frontController au préalable et ensuite tester la syntaxe suivante "User_Index" lors d'un ajout de ressource dans les ACLs.
Attention:
$frontController->setControllerDirectory(array( 'default' => APPLICATION_PATH .'/user/controllers/' )); $frontController->addControllerDirectory(APPLICATION_PATH . '/admin/controllers','admin');
Ne sert pas à déclarer tes modules, mais à spécifier les chemins de tes controllers.
Il faut faire comme suit, dans application.ini :
;====== Resource frontController resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.moduleDirectory = APPLICATION_PATH "/../modules" resources.frontController.moduleControllerDirectoryName = "controllers" ;====== Resource modules resources.modules[] = ""
Ensuite tu nommes bien tes dossiers de modules comme leurs prefixes ("user/index" => "User_IndexController").
Après test la syntaxe "User_Index" dans les ACLs (sans garantie).
A+ benjamin.
Dernière modification par Delprog (08-07-2009 15:38:53)
Hors ligne
Ouais mais en fait, mon arborescence est comme ceci:
Application
--user
----Controllers
-------IndexControllers.php
--admin
----Controllers
-------IndexControllers.php
En fait, j'ai recréer l'arbo proposé par Zend: http://framework.zend.com/manual/en/zen … dular.html
Ainsi, je n'ai tout simplement pas besoin de déclarers un dossier de modules puisqu'ils sont directement dans application. J'ai essayer tout plein de format pour les déclarations: user_index, User_Index,user,index
Bref...je ne suis tout simplement pas capable de lui faire reconnaitre :
$acl->add(new Zend_Acl_Resource('module_controller'));
Request Parameters: array(3) { ["module"]=> string(5) "admin" ["controller"]=> string(5) "index" ["action"]=> string(5) "index" }
Dernière modification par probitaille (10-07-2009 16:52:01)
Hors ligne
Pages: 1