Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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 :
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 :
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)
Hors ligne
Je me permets de vous relancer, je vois qu'il y a eu 22 lecteurs, personne ne sait ?
Merci bien.
Hors ligne
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 ?
$this->add(new Zend_Acl_Resource('public'));
où 'public', correspond au module a part entiere ?
pour ensuite faire
$this->allow(nom_du_role,nom_du_module);
Par avance merci.
Hors ligne
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....
Hors ligne
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!
Hors ligne
Ouais, j'ai tout compris, ca marche maintenant.
merci
Hors ligne