Forum des développeurs  

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é.
Précédent   Forum des développeurs > PHP > Outils > Zend > Zend Framework > Zend_Acl & Zend_Auth

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.

Réponse
 
Outils de la discussion
Vieux 29/10/2008, 00h27   #1 (permalink)
Invité de passage
 
Date d'inscription: mai 2008
Messages: 1
Par défaut Utilisation de Zend_Acl

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
 
Je souhaite l'utiliser avec Zend_Auth, et le stocker dans une base de donnée avec un petit serialize(), et créer une interface de gestion pour ajouter/enlever des rôles ou des ressources puis les stocker sur la BD, pour ne pas avoir de truc hard-codé.

Merci
~dementia est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/11/2008, 23h44   #2 (permalink)
Invité de passage
 
Date d'inscription: novembre 2008
Messages: 5
Par défaut

+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 !
Nivek2 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/12/2008, 11h36   #3 (permalink)
Rédacteur
 
Avatar de MaitrePylos
 
Date d'inscription: juin 2005
Localisation: Namur
Âge: 35
Messages: 1 271
Par défaut

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
 
Cette étant construite par notre amis Janitrix, il lui à donné son nom.
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'));
 
 
Ici , nous créons tout les contrôleurs existant dans l'application, ce qui noius donnes les ressources de l'application.

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'));
 
Ici trois statut

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');
        
 
 
 
 
Alors ici on à 4 lignes pour visiteur :
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
__________________
L'expérience est la somme de toutes nos erreurs

Je suis une Brute

Dernière modification par MaitrePylos ; 01/12/2008 à 11h46
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/12/2008, 18h40   #4 (permalink)
Invité de passage
 
Date d'inscription: novembre 2008
Messages: 5
Par défaut

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 !
Nivek2 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/12/2008, 20h21   #5 (permalink)
Rédacteur
 
Avatar de MaitrePylos
 
Date d'inscription: juin 2005
Localisation: Namur
Âge: 35
Messages: 1 271
Par défaut

Tu es donc capable, de créer un petit formulaire Login-password, et tu as une table reprenant tes user, leurs mot de passe et leur statut (EX: visiteur - membre - administrateur)?
__________________
L'expérience est la somme de toutes nos erreurs

Je suis une Brute
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/12/2008, 23h28   #6 (permalink)
Invité de passage
 
Date d'inscription: novembre 2008
Messages: 5
Par défaut

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
Nivek2 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/12/2008, 08h19   #7 (permalink)
Rédacteur
 
Avatar de MaitrePylos
 
Date d'inscription: juin 2005
Localisation: Namur
Âge: 35
Messages: 1 271
Par défaut

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 .
__________________
L'expérience est la somme de toutes nos erreurs

Je suis une Brute
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/12/2008, 02h12   #8 (permalink)
Invité de passage
 
Date d'inscription: novembre 2008
Messages: 5
Par défaut

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'ai beau cherché partout, je trouve pas ou comprend pas
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
Nivek2 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/12/2008, 09h48   #9 (permalink)
Rédacteur
 
Avatar de MaitrePylos
 
Date d'inscription: juin 2005
Localisation: Namur
Âge: 35
Messages: 1 271
Par défaut

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;
        }
 
 
qui dans mon cas serait

Code :
 
 if ($this->_auth->hasIdentity()) {
            $role = $this->_auth->getIdentity()->log_acl;
        }
 
 
j'espère t'avoir éclairer
__________________
L'expérience est la somme de toutes nos erreurs

Je suis une Brute
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/12/2008, 16h21   #10 (permalink)
Membre du Club
 
Date d'inscription: novembre 2006
Localisation: Belgique, Bruxelles
Messages: 95
Par défaut

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
oliviercuyp est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/12/2008, 20h31   #11 (permalink)
Invité de passage
 
Date d'inscription: novembre 2008
Messages: 5
Par défaut

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
Nivek2 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCOURS PHPSOURCES PHPLIVRES PHPSCRIPTS PHPOUTILS PHPCOMPARATIFSPHP TVZend Framework

Réponse

Précédent   Forum des développeurs > PHP > Outils > Zend > Zend Framework > Zend_Acl & Zend_Auth



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide