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 :

[Zend_Acl] Acl Auth fonctionnement général


Sujet :

Zend_Acl & Zend_Auth PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Points : 11
    Points
    11
    Par défaut [Zend_Acl] Acl Auth fonctionnement général
    J'ai mis en place un système d'identification d'utilisateurs en suivant le tuto :
    http://r-benyacoub.developpez.com/tu...ork/zend-auth/

    Maintenant j'essaie de gérer des droits, donc je m'interresse à Zend_Acl.
    Les informations que l'on trouve sur le net concernant l'utilisation de Zend_Acl m'embrouillent un peu car souvent ce sont des méthode différentes qui sont utilisées.
    Du coup je viens la pour exposer ma situation, si ça parle à quelqu'un qui pourrait m'expliquer et me permettre d'avancer...
    Sur le site web, il faut dans tous les cas être identifié pour accéder a n'importe quelle page excepté la page de login.
    J'ai donc mis en place comme expliqué dans le tuto Zend_Auth cité plus haut :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php
    class AuthController extends Zend_Controller_Action 
    {
        function init()
        {
            $this->initView();
            $this->view->baseUrl = $this->_request->getBaseUrl();
        }
        function indexAction()
        {
            $this->_redirect('/');
        }
        function loginAction()
        {
            $this->view->message = '';
            if($this->_request->isPost()){
                Zend_Loader::loadClass('Zend_Filter_StripTags');
                $filtre = new Zend_Filter_StripTags();
                echo $this->_request->getPost('username');
                $username = $filtre->filter($this->_request->getPost('username'));
                $password = $filtre->filter($this->_request->getPost('password'));
     
                if (empty($username)){
                    $this->view->message = "Nom d'utilisateur obligatoire";
                }else{
                    Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
                    $db = Zend_registry::get('db');
                    $authAdapter = new Zend_Auth_Adapter_DbTable($db);
                    $authAdapter->setTableName('utilisateur');
                    $authAdapter->setIdentityColumn('nom');
                    $authAdapter->setCredentialColumn('motdepasse');
     
                    $authAdapter->setIdentity($username);
                    $authAdapter->setCredential($password);
     
                    $auth = Zend_Auth::getInstance();
                    $result = $auth->authenticate($authAdapter);
     
                    if ($result->isValid()){
                        $data = $authAdapter->getResultRowObject(null,'motdepasse');
                        $auth->getStorage()->write($data);
                        $this->_redirect('/');
                    }else{
                        $this->view->message = 'L\'identification a échouée';
                    }
                }
            }
            $this->view->title = "Authentification";
            $this->render();
        }
        function logoutAction()
        {
            Zend_Auth::getInstance()->clearIdentity();
            $this->_redirect('/');
        }
    }
    ?>
    Et puis dans mon IndexController, j'ai rajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function preDispatch()
         {
             $auth = Zend_Auth::getInstance();
             if(!$auth->hasIdentity()){
                 $this->_redirect('auth/login');
             }
         }
    Ca, ca marche, il faut etre un utilisateur existant dans la base de donnée pour accèder au site.
    Maintenant, si j'essaie de gérer les droits :
    Je me suis inspiré de code trouvé sur le net, j'ai rajouté dans mon bootstrap
    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
    //-------------------------------------------------------------
    // creer le moteur d'ACL
    Zend_Loader::loadClass("Zend_Acl");
    Zend_Loader::loadClass("Zend_Acl_Role");
    Zend_Loader::loadClass("Zend_Acl_Resource"); 
     
    $acl = new Zend_Acl();
    // menu utilisateur---
    $acl->add(new Zend_Acl_Resource('Accueil'));
    $acl->add(new Zend_Acl_Resource('Dossier'));
    $acl->add(new Zend_Acl_Resource('Compte'));
     
    // menu administrateur---
    $acl->add(new Zend_Acl_Resource('GestionUtilisateur'));
     
    $acl->addRole(new Zend_Acl_Role('utilisateur'));
    $acl->addRole(new Zend_Acl_Role('administrateur'),'utilisateur');
     
     
    $acl->allow('utilisateur', 'Accueil');
    $acl->allow('utilisateur', 'Dossier');
    $acl->allow('utilisateur', 'Compte');
     
    $acl->allow('administrateur', 'GestionUtilisateur');
     
     
    Zend_Registry::set("ACL",$acl);
    //-------------------------------------------------------------
    Donc :
    - Je définie mes ressources
    - Je définie mes rôles : utilisateur, administrateur (qui hérite de utilisateur)
    - Je stocke ces infos dans le registre

    Maintenant, quelques questions pour personnes qui ont déjà utilisé Acl :

    1) Comment je fais pour savoir si quelqu'un est utilisateur ou gestionnaire ? Je stocke un code dans la table des utilisateurs et je le recupère en même temps que l'authentification ? ensuite un fois que j'ai son rôle je rajoute du code dans le predispatch afin de confirmer un accés ou non à une ressources ? (des exemple de code seraient les bienvenues)

    2) La, je ne gère que 2 rôles utilisateur et gestionnaire. Imaginons que je veuille gérer les accès plus finement et que chaque utilisateur ait des droits spécifiques(un programme de gestion permettrait de les gérer) : Est il conseillé de stocker un profil par utilisateur, ou bien c'est trop lourd à gérer et il vaut mieux définir 4/5 profils d'utilisateur qui conviendrons en gros à tous les utilisateurs ?

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Pour 2) :
    Moi, j'ai des groupes (Administrateur, gestionnaire, ...) mais chaque utilisateur appartient aussi à son propre groupe : L'utilisateur 'Toto' appartient lui et lui seul au group 'Toto'.
    Ainsi, je peux gérer les droits par utilisateur mais aussi par groupes.

Discussions similaires

  1. [AC-2007] Question sur le fonctionnement général d'access
    Par Grooz13 dans le forum Modélisation
    Réponses: 3
    Dernier message: 06/07/2010, 18h23
  2. Fonctionnement général d'un outil ETL ?
    Par szoubir dans le forum Alimentation
    Réponses: 6
    Dernier message: 12/04/2010, 11h37
  3. [ADO.net] Fonctionnement général SQL embarqué
    Par zax-tfh dans le forum Accès aux données
    Réponses: 1
    Dernier message: 05/03/2009, 11h58
  4. Auth et Acl, combiner les deux ?
    Par Takis dans le forum Zend_Acl & Zend_Auth
    Réponses: 1
    Dernier message: 31/03/2008, 10h58
  5. [fmincon] Fonctionnement général de l'algorithme
    Par Hobbes69 dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/12/2007, 12h22

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