IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Acl & Zend_Auth PHP Discussion :

Utilisation de Zend_Acl


Sujet :

Zend_Acl & Zend_Auth PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1
    Points : 1
    Points
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    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

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 6
    Points
    6
    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 !

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $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

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 6
    Points
    6
    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 !

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    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)?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 6
    Points
    6
    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

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    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 .

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 6
    Points
    6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
      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

  9. #9
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     if ($this->_auth->hasIdentity()) {
                $role = $this->_auth->getIdentity()->role;
            }
    qui dans mon cas serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     if ($this->_auth->hasIdentity()) {
                $role = $this->_auth->getIdentity()->log_acl;
            }
    j'espère t'avoir éclairer

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    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

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 6
    Points
    6
    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

Discussions similaires

  1. [ZF 1.10] Utilisation de Zend_Acl
    Par ESTYOUNES2008 dans le forum Zend_Acl & Zend_Auth
    Réponses: 2
    Dernier message: 11/05/2010, 15h15
  2. [ZF 1.7] Utilisation de Zend_Acl
    Par KiMbOoO dans le forum Zend_Acl & Zend_Auth
    Réponses: 2
    Dernier message: 19/02/2009, 13h56
  3. Utilisation de Zend_Acl et Zend_Auth
    Par k o D dans le forum Zend_Acl & Zend_Auth
    Réponses: 10
    Dernier message: 02/10/2008, 14h28
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo