![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| 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. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: mai 2008
Messages: 1
|
Bonsoir/Bonjour,
Je débute avec le Zend Framework, et je me demandais comment, concrètement, utiliser le Zend_Acl... Je n'ai rien trouvé sur le web de complet sur le sujet. Est-ce le contrôleur, à partir du moment où l'on a défini les rôles et les accès, et les lui avoir donné, qui se charge de vérifier si un utilisateur a l'autorisation ou non d'accéder à une ressource (donc il redirige si non), ou alors faut-il coder ça soi-même ? (càd s'en servir comme une "base de donnée" et l'interroger) Et aussi, comment organise-ton ses fichiers dans le projet ? Chez moi c'est comme ceci : Code :
application
--default
----controllers
----layouts
----models
----views
------filters
------helpers
------scripts
html
--images
--scripts
--style
library
--Zend
Merci |
|
|
|
|
|
#2 (permalink) |
|
Invité de passage
![]() Date d'inscription: novembre 2008
Messages: 5
|
+1 !!
je debute plus ou moins avec ZF, j'ai fais le tour du web, lu tout ce que j'ai pu trouver, et j'en suis au meme point concernant zend_Acl J'ai le meme objectif que toi pour l'interface admin au final Bref merci a tous ceux qui peuvent nous aider ! |
|
|
|
|
|
#3 (permalink) |
![]() Date d'inscription: juin 2005
Localisation: Namur
Âge: 35
Messages: 1 271
|
La question étant récurente, et les explications pas clair, je vais tenter de vous expliquer(Je ferais peut-être un tuto la dessus).
Soit la classe ACL suivante Code :
<?php class Inuitech_Janitrix_Acl extends Zend_Acl { public function __construct() { $this->add(new Zend_Acl_Resource('index')); $this->add(new Zend_Acl_Resource('connexion')); $this->add(new Zend_Acl_Resource('inscription')); $this->add(new Zend_Acl_Resource('nouvelles')); $this->add(new Zend_Acl_Resource('cours')); $this->add(new Zend_Acl_Resource('videos')); $this->add(new Zend_Acl_Resource('contact')); $this->add(new Zend_Acl_Resource('administration')); $this->addRole(new Zend_Acl_Role('visiteur')); $this->addRole(new Zend_Acl_Role('membre'), 'visiteur'); $this->addRole(new Zend_Acl_Role('administrateur')); $this->allow('visiteur'); $this->deny('visiteur', 'cours', 'commenter'); $this->deny('visiteur', 'videos', 'commenter'); $this->deny('visiteur', 'administration'); $this->allow('membre'); $this->deny('membre', 'administration'); $this->deny('membre', 'inscription'); $this->allow('administrateur'); } } Bon on commence par le début Le nom de la classe Code :
class Inuitech_Janitrix_Acl extends Zend_Acl En suivant le sytème de convention Zf, on retrouveras normalement cette classe dans le répertoire /library/Inuitech/Janitrix/Acl.php La classe en elle même : Les ressources : Code :
$this->add(new Zend_Acl_Resource('index')); $this->add(new Zend_Acl_Resource('connexion')); $this->add(new Zend_Acl_Resource('inscription')); $this->add(new Zend_Acl_Resource('nouvelles')); $this->add(new Zend_Acl_Resource('cours')); $this->add(new Zend_Acl_Resource('videos')); $this->add(new Zend_Acl_Resource('contact')); $this->add(new Zend_Acl_Resource('administration')); Donc 'contact', correspônd à contactController.php et ainsi de suite. Les rôles : Quand vous vous connecté à un site, vous avez généralement un statut, visiteur, amis, administrateur et bien dans les ACL c'est la même chose, il faut définir des statut ayant accès à l'application. Code :
$this->addRole(new Zend_Acl_Role('visiteur')); $this->addRole(new Zend_Acl_Role('membre'), 'visiteur'); $this->addRole(new Zend_Acl_Role('administrateur')); Visiteur membre qui hérite des droits de visiteur administrateur qui hérite des droits de membre Et enfin on donne les accès à l'application Code :
$this->allow('visiteur'); $this->deny('visiteur', 'cours', 'commenter'); $this->deny('visiteur', 'videos', 'commenter'); $this->deny('visiteur', 'administration'); 1 : on donne accès à tout pour visiteur(avant de restreindre). 2 : On interdit à 'visiteur' de pouvoir utiliser l'action 'commenter' du controller 'cours' 3 : On interdit à 'visiteur' de pouvoir utiliser l'action 'commenter' du controller 'videos' 4 : On interdit à 'visiteur' de pouvoir utiliser le controller 'administration' Il en va de suite pour le reste des utilisateur. Avez vous compris le principe ? Attention, ensuite il faut mettre un plugins en place. Voir ici pour le plugin de Janitrix Dernière modification par MaitrePylos ; 01/12/2008 à 11h46 |
|
|
|
|
|
#4 (permalink) |
|
Invité de passage
![]() Date d'inscription: novembre 2008
Messages: 5
|
merci pour cette réponse détaillé ! c'est top pour comprendre
Par contre je ne comprend pas comment mettre en base de donnée les droits de façon a ce que l'on puisse avoir une interface admin pour en crée des nouveaux ou en supprimer. la gestion d'une table, avec ajout , edition, suppresion; j'ai bien pigé par contre pour lié le tout avec acl, merci pour ton aide et le p'tit lien vers l'autre post ! |
|
|
|
|
|
#6 (permalink) |
|
Invité de passage
![]() Date d'inscription: novembre 2008
Messages: 5
|
oui, apres avoir suivie ce tuto
http://akrabat.com/2008/03/17/update...-framework-15/ je suis parti plus/moins sur ce model et j'ai maintenant un table de ce style (`ID`, `username`, `password`, `email`, `registered`, `last_visit`, `status`, `display_name`) où je crée, modif, et efface a souhait Graphiste a la base, le model mvc ne m'est pas inconnu grace a l'actionscript 2/3 mais mes connaissances en php et sql reste tres limiter et j'apprend petit a petit |
|
|
|
|
|
#7 (permalink) |
![]() Date d'inscription: juin 2005
Localisation: Namur
Âge: 35
Messages: 1 271
|
Ok, maintenant, il faut faire un formulaire, qui va connecter un utilisateur et vérifier quels sont ses droits ou non.
Ensuite, je te montrerais, comment je me connecte, et on mettras en lien, les ACL, la connections, et le plugins de Janitrix . |
|
|
|
|
|
#8 (permalink) |
|
Invité de passage
![]() Date d'inscription: novembre 2008
Messages: 5
|
sorry pour le temps de reponse, alors j'ai bien mon formulaire d'identification, qui tape dans ma base de donnée, j'ai fais les acl comme tu l'as si bien expliqué, j'y est integré le plugins de Janitrix, bref j'ai zend auth et zend acl qui fonctionne
mais ma question est peut etre une lacunne php toute bete, comme mettre cette partie du code en base sql de facon a les rendre dynamique sans retoucher au code en lui meme plus tard. Code :
public function __construct() { $this->add(new Zend_Acl_Resource('index')); $this->add(new Zend_Acl_Resource('connexion')); $this->add(new Zend_Acl_Resource('inscription')); $this->add(new Zend_Acl_Resource('nouvelles')); $this->add(new Zend_Acl_Resource('cours')); $this->add(new Zend_Acl_Resource('videos')); $this->add(new Zend_Acl_Resource('contact')); $this->add(new Zend_Acl_Resource('administration')); $this->addRole(new Zend_Acl_Role('visiteur')); $this->addRole(new Zend_Acl_Role('membre'), 'visiteur'); $this->addRole(new Zend_Acl_Role('administrateur')); $this->allow('visiteur'); $this->deny('visiteur', 'cours', 'commenter'); $this->deny('visiteur', 'videos', 'commenter'); $this->deny('visiteur', 'administration'); $this->allow('membre'); $this->deny('membre', 'administration'); $this->deny('membre', 'inscription'); $this->allow('administrateur'); } } j'susi tombé today sur cette exemple http://www.oplabo.com/article/45 j'suis en train d'essayer de le comprendre Si tu as une solution, j'suis prenneur !!! car la je tourne en rond sur ce probleme |
|
|
|
|
|
#9 (permalink) |
![]() Date d'inscription: juin 2005
Localisation: Namur
Âge: 35
Messages: 1 271
|
Bon maintenant il te faut une identification, pour passer au plugin de janitrix.
Moi, j'ai une table [login ] log_nom // nom utilisateur log_passwd //mot de passe log_acl //son role dans l'application a partir de là j'identifie un utilisateur Code :
$formData = $this->_request->getPost(); //récupère le formulaire if ($formData['log_nom'] != "" || $formData['log_passwd'] != "") { $db = new LoginDb();// crée un objet vers ma db $authAdapter = new Zend_Auth_Adapter_DbTable($db->get_db());//passe le paramètre de connection $authAdapter->setTableName('login');//choisi la table $authAdapter->setIdentityColumn('log_nom');//récupère les noms $authAdapter->setCredentialColumn('log_passwd');//récupère les mots de pass $authAdapter->setIdentity($formData['log_nom'])->setCredential($formData['log_passwd']);//passe le formulaire $auth = Zend_Auth::getInstance(); $resultat = $auth->authenticate($authAdapter); // On essaye d'identifier l'utilisateur avec les informations du formulaire valide if ($resultat->isValid() { // si c'est ok $data = $authAdapter->getResultRowObject(null, 'log_passwd'); $auth->getStorage()->write($data); // on écrit dans le stockage les informations de l'utilisateur } dans le plugin de janitrix on vérifie les rôles avec Code :
if ($this->_auth->hasIdentity()) { $role = $this->_auth->getIdentity()->role; } Code :
if ($this->_auth->hasIdentity()) { $role = $this->_auth->getIdentity()->log_acl; } |
|
|
|
|
|
#10 (permalink) |
|
Membre du Club
![]() Date d'inscription: novembre 2006
Localisation: Belgique, Bruxelles
Messages: 95
|
Bonjour Nivek2,
Pour ma part, j'ai mis tout le système Acl en base données. Tu pourras trouver les détails des tables et du plugin ici (regarde le dernier post). N'hésites pas si il y a des choses qui ne te semblent pas claires |
|
|
|
|
|
#11 (permalink) |
|
Invité de passage
![]() Date d'inscription: novembre 2008
Messages: 5
|
Merci a vous deux !
mais j'ai reussi par moi meme hier soir, pour le moment de maniere pas tres propre/optimisé mais ca fonctionne je vais faire en sorte de faire un truc propre avec mon exemple et vos code par contre, comme ce n'etait pas mon post, je ne peux pas mettre resolu :s |
|
|
|
|
![]() |
![]() |
||
Utilisation de Zend_Acl
|
||
| Outils de la discussion | |
|
|