Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-07-2011 11:23:44

damdamien
Membre
Date d'inscription: 02-07-2011
Messages: 22

[ZEND_session,Auth,Acl][1.11] probleme compréhension et assemblage

Bonjour à la communauté,

PS : Désolé pour les fautes

Alors je débutes sur Zend framework et je souhaiterais utilisé la plupart des composants de cette outils afin d'obtenir une bonne compréhension global assez rapidement. J'utilise la version 1.11

Aujourd'hui j'ai un plusieurs problèmes et je vais essayé de détailler le plus possible afin d'obtenir votre aide charitable.

Pour commencer,

J'ai ajouter un fichier data dans l'arborescence de mon projet lequel contient un dossier session.

Ceci a bien été déclarer dans mon fichier config application.ini et fonctionne apriori.

Code:

resources.session.save_path = APPLICATION_PATH "/data/session"
resources.session.use_only_cookies = true
resources.session.remember_me_seconds = 108000

J'ai créé un controller de connexion qui fonctionne correctement

Maintenant, vous vous en doutez bien j'ai suivi des tutoriels et j'ai compris comment cela fonctionne . Sauf que dans la plupart des tutoriels ils utilisent une vue de connexion pour afficher le formulaire.

Moi, je souhaiterais que ce formulaire de connexion soit présent sur toutes mais pages (dans mon layout) et donc que ce controller fonctionne de façon transparente (donc pas liée à une vue).

Bien sur, je vais créé un helper de vue (ou autre selon vos réponses) baser sur une lib Acl de test que j'ai créé et qui affichera soit le formulaire de connexion soit un menu pour les membres connecté.

Je ne vois pas du tout comment procéder. Help me please!

mais question en décrypter smile

1) comment rendre ce controller transparent ?
2) comment inclure et utilisé la lib Acl que j'ai créé ?

je mais les script que j'ai créé (si je n'y suis pas du tout hésité pas a le dire)

le connectionController

Code:

[lang=php]<?php

class ConnectionController extends Zend_Controller_Action
{

        public function indexAction() {
            
                if(Zend_Auth::getInstance()->hasIdentity()){
                    
                    print_r(Zend_Auth::getInstance()->getIdentity());
                    var_dump(Zend_Auth::getInstance()->getStorage()->read());
                }
                else
                {
                    $resquest = $this->getRequest();
                    $form = New Application_Form_Connection;
                        if($resquest->isPost()){
                            if($form->isValid($this->_request->getPost())){
                          
                                $username=$form->getValue('email');
                                $pass=$form->getValue('pass');
                                
                                $config = $this->getAuthAdapter();
                                $config->setIdentity($username)
                                       ->setCredential($pass);

                                $auth=Zend_Auth::getInstance();
                                $result = $auth->authenticate($config);
                                
                                if($result->isValid()){
                                    $identiter = $config->getResultRowObject();
                                    $donneeUser = $auth->getStorage();
                                    $donneeUser->write($identiter);
                                    
                                    //test de recuperation
                                    echo $auth->getIdentity();
                                    var_dump(Zend_Auth::getInstance()->getStorage()->read());
                                    echo 'connecter';
                                    
                                }
                                else
                                {
                                    echo 'non connecter';
                                    $this->view->connectionForm = $form;
                                }
                                
                            }
                            else
                            {
                                 $this->view->connectionForm = $form;
                            }
                                
                        }
                        else
                        {
                            $this->view->connectionForm = $form;
                        }
                }
            return;
            
            }
        public function logoutAction() {
            
                Zend_Auth::getInstance()->clearIdentity();
                return;
        }
            
            private function getAuthAdapter(){
                $config = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
                $config->setTableName('test')
                       ->setIdentityColumn('mail')
                       ->setCredentialColumn('pass')
                       ->setCredentialTreatment('SHA1(?)');
                return $config;    
            }
     
    


}

la lib Acl que j'ai créé : (je l'ai installé dans library Mylib/MyAcl.php)

Code:

[lang=php]<?php

class MyAcl extends Zend_Acl
{
    public function __construct(Zend_Auth $auth)
    {
        parent::__construct();

        $roleGuest = new Zend_Acl_Role('visiteur');
        
        //page du site ainsi
        
        $this->add(new Zend_Acl_Resource('Accueil'));
        $this->add(new Zend_Acl_Resource('Annuaire'));
        $this->add(new Zend_Acl_Resource('Article'));
        $this->add(new Zend_Acl_Resource('Critere'));
        $this->add(new Zend_Acl_Resource('Adhesion'));
        $this->add(new Zend_Acl_Resource('Contact'));
        $this->add(new Zend_Acl_Resource('Faq'));
        $this->add(new Zend_Acl_Resource('ConditionGeneralUtilisation'));
        $this->add(new Zend_Acl_Resource('Confidentialite'));
        $this->add(new Zend_Acl_Resource('ConditionGeneralDeVente'));
        
        
        
        //distribution des droits
        $this->addRole(new Zend_Acl_Role('visiteur')); 
        $this->addRole(new Zend_Acl_Role('utilisateur'), 'visiteur');
        $this->addRole(new Zend_Acl_Role('client'), 'utilisateur');
        $this->addRole(new Zend_Acl_Role('admin'), 'client');

        //pages et accés
        //visiteur
        $this->allow('visiteur', 'Accueil');
        $this->allow('visiteur', 'Annuaire');
        $this->allow('visiteur', 'Article');
        $this->allow('visiteur', 'Critere');
        $this->allow('visiteur', 'Adhesion');
        $this->allow('visiteur', 'Contact');
        $this->allow('visiteur', 'Faq');
        $this->allow('visiteur', 'ConditionGeneralUtilisation');
        $this->allow('visiteur', 'Confidentialite');
        $this->allow('visiteur', 'ConditionGeneralDeVente');
        
        //utilisateur
        $this->allow('utilisateur', 'Annuaire', 'ajouterCommentaire');
        $this->allow('utilisateur', 'Annuaire', 'modifierCommentaire');
        $this->allow('utilisateur', 'Article', 'ajouterCommentaire');
        $this->allow('utilisateur', 'Article', 'modifierCommentaire');
        
        
        
        //admin
        $this->allow('admin'); // unrestricted access

        // Add authoring ACL check
        $this->allow('member', 'forum', 'update', new MyAcl_Forum_Assertion($auth));
        // NOTE: Dependency on auth object to allow getIdentity() for authenticated user object
    }
}

point positif dans tout ça j'arrive à récupérer mes identifiant

Code:

object(stdClass)[55]
  public 'id' => string '1' (length=1)
  public 'mail' => string 'admin@mail.fr' (length=13)
  public 'pass' => string '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8' (length=40)
  public 'role' => string 'admin' (length=5)

merci d'avoir lu!

une réponses ou des liens, j'ai cherché sur le net via google mais j'ai pas trouver.

amicalement

damdamien

Dernière modification par damdamien (05-07-2011 11:36:37)

Hors ligne

 

#2 05-07-2011 17:07:23

T_bo
Nouveau membre
Date d'inscription: 06-05-2011
Messages: 8

Re: [ZEND_session,Auth,Acl][1.11] probleme compréhension et assemblage

Rien de bien compliqué par exemple tu peux faire appel a ton action dans ton layout ainsi tu aura ton formulaire (ou ton dump) qui s'affichera à l'endroit ou tu l'a mis.

Un truc du genre par exemple :

Code:

[lang = php]
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Mon Site</title>
</head>
<body>
<?php
    <div id="content">
    echo $this->layout()->content;
 </div>
<div id='user'>
  echo $this->action("index", "Connection");
</div>
 ?>
</body>
</html>

Dernière modification par T_bo (05-07-2011 17:08:53)

Hors ligne

 

#3 06-07-2011 09:53:41

damdamien
Membre
Date d'inscription: 02-07-2011
Messages: 22

Re: [ZEND_session,Auth,Acl][1.11] probleme compréhension et assemblage

Merci de m'avoir répondu,

Cependant, je ne comprend pas bien la solution que tu me propose. Si j'utilise le principe que tu m'as donné lorsque le visiteur cherchera a ce connecter il sera forcement rediriger vers une page que j'aurais déterminé dans les conditions de mon controller de connexion or je veux que l'utilisateur soit rédiger vers la page courante .

Pour faire simple, bien sur je ferais ceci en ajax mais je souhaites développer une version static (coté client) à peu prés similaire afin qu'une probable désactivation de javascript ne modifie pas le comportement du site.

Imaginons, que j'ai 500 articles sur mon sites, un visiteur souhaites ce connecter pour poster un commentaire j'aimerais lui permettre de le faire de façon transparente sans qu'il soit rediriger vers la page X.

Peut être que la création d'un controller n'était pas un bon choix. Le problème est que la doc de zend est tellement ambigüe qu'elle ne facilite pas la compréhension des débutant.

EDIT: n'est ce pas un plugin qui étendrait Zend_Controller_Plugin_Abstract dont j'aurais besoin par hazard? 

merci d'avoir lu

amicalement

damdamien

Dernière modification par damdamien (06-07-2011 10:47:30)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages