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 :

probléme pour mettre en place le tuto de Zend_Acl / Zend_Auth scénario d'exemple


Sujet :

Zend_Acl & Zend_Auth PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Par défaut probléme pour mettre en place le tuto de Zend_Acl / Zend_Auth scénario d'exemple
    Bonjour
    voici que 2 jours j'essaye de mettre en place zend_acl et la gestion de droit mais je rencontre plusieurs problèmes a comprendre ce tuto Zend_Acl / Zend_Auth scénario d'exemple.

    1) je sais pas dans quel fichiers je doit mettre ces classes : Classe MyAcl, My_Plugin_Auth.

    2) et ou mettre la fonction preDispatch et surtout y a un paramètres $request que je sais pas ou je l'envoie.

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Par défaut
    ReBonjour,

    j'ai essayé d'avancer un peut, et voila ce que j'ai fait d'apres ce tutorial :

    http://www.wowww.ch/index.php?post/2...th-et-Zend-Acl

    j'ai défini mes roles et mes ressource dans un fichier .ini que je l'ai mis dans mon dossier configs,

    acl.ini

    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
    [roles]  
     
    guest = null  
    member = null  
    admin = null  
     
    [ressources]  
     
    ; définition des ressources dans le module par défaut  
    index    = null  
    affectation   = null  
    mouvements = null  
    configurations = null  
    reporting = null  
    admin = null
     
     
    [guest]  
     
    allow.index    = null  
    allow.reporting = null 
     
    ; member hérite de guest  
    [member : guest]  
     
    ; on interdit le login (le membre est déjà identifié)  
    deny.login   = null  
    allow.affectation = null  
    allow.configurations = null 
    allow.mouvements = null 
     
    ; admin hérite de member  
    [admin : member]  
     
    allow.admin = null
    apres j'ai ajouter un repertoire dans library My ou j'ai crée 2 classes

    My_Controller_Plugin_Auth.php

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    <?php
    /**
     * Plugin d'authentification
     * 
     * Largement inspiré de :
     * http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/auth-http/?page=modele-MVC
    **/
     
    class My_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract	{
    	/**
    	 * @var Zend_Auth instance 
    	 */
    	private $_auth;
     
    	/**
    	 * @var Zend_Acl instance 
    	 */
    	private $_acl;
     
    	/**
    	 * Chemin de redirection lors de l'échec d'authentification
    	 */
    	const FAIL_AUTH_MODULE     = 'default';
    	const FAIL_AUTH_ACTION     = 'index';
    	const FAIL_AUTH_CONTROLLER = 'account';
     
    	/**
    	 * Chemin de redirection lors de l'échec de contrôle des privilèges
    	 */
    	const FAIL_ACL_MODULE     = 'default';
    	const FAIL_ACL_ACTION     = 'privileges';
    	const FAIL_ACL_CONTROLLER = 'error';
     
    	/**
    	 * Constructeur
    	 */
    	public function __construct(Zend_Acl $acl)	{
    		$this->_acl  = $acl ;
    		$this->_auth = Zend_Auth::getInstance() ;
    	}
     
    	/**
    	 * Vérifie les autorisations
    	 * Utilise _request et _response hérités et injectés par le FC
    	 */
    	public function preDispatch(Zend_Controller_Request_Abstract $request)	{
    		// is the user authenticated
    		if ($this->_auth->hasIdentity()) {
    		  // yes ! we get his role
    		  $user = $this->_auth->getStorage()->read() ;
    		  $role = $user['role'] ;
    		} else {
    		  // no = guest user
    		  $role = 'guest';
    		}
     
    		$module 	= $request->getModuleName() ;
    		$controller = $request->getControllerName() ;
    		$action     = $request->getActionName() ;
     
    		$front = Zend_Controller_Front::getInstance() ;
    		$default = $front->getDefaultModule() ;
     
    		// compose le nom de la ressource
    		if ($module == $default)	{
    			$resource = $controller ;
    		} else {
    			$resource = $module.'_'.$controller ;
    		}
     
    		// est-ce que la ressource existe ?
    		if (!$this->_acl->has($resource)) {
    		  $resource = null;
    		}
     
    		// contrôle si l'utilisateur est autorisé
    		if (!$this->_acl->isAllowed($role, $resource, $action)) {
    			// l'utilisateur n'est pas autorisé à accéder à cette ressource
    			// on va le rediriger
    			if (!$this->_auth->hasIdentity()) {
    				// il n'est pas identifié -> module de login
    				$module = self::FAIL_AUTH_MODULE ;
    				$controller = self::FAIL_AUTH_CONTROLLER ;
    				$action = self::FAIL_AUTH_ACTION ;
    			} else {
    				// il est identifié -> error de privilèges
    				$module = self::FAIL_ACL_MODULE ;
    				$controller = self::FAIL_ACL_CONTROLLER ;
    				$action = self::FAIL_ACL_ACTION ;
    			}
    		}
     
    		$request->setModuleName($module) ;
    		$request->setControllerName($controller) ;
    		$request->setActionName($action) ;
    	}
    }

    \\ My_Acl_Ini.php
    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
    58
    59
    60
    61
    62
    63
    64
     
    <?php
    /**
     * Classe de création des ACL via un fichier de configuration INI
    **/
     
    class My_Acl_Ini extends Zend_Acl	{
    	public function __construct($file)	{
    		$roles = new Zend_Config_Ini($file, 'roles') ;
    		$this->_setRoles($roles) ;
     
    		$ressources = new Zend_Config_Ini($file, 'ressources') ;
    		$this->_setRessources($ressources) ;
     
    		foreach ($roles->toArray() as $role => $parents)	{
    			$privileges = new Zend_Config_Ini($file, $role) ;
    			$this->_setPrivileges($role, $privileges) ;
    		}
    	}
     
    	protected function _setRoles($roles)	{
    		foreach ($roles as $role => $parents)	{
    			if (empty($parents))	{
    				$parents = null ;
    			} else {
    				$parents = explode(',', $parents) ;
    			}
     
    			$this->addRole(new Zend_Acl_Role($role), $parents);
    		}
     
    		return $this ;
    	}
     
    	protected function _setRessources($ressources)	{
    		foreach ($ressources as $ressource => $parents)	{
    			if (empty($parents))	{
    				$parents = null ;
    			} else {
    				$parents = explode(',', $parents) ;
    			}
     
    			$this->add(new Zend_Acl_Resource($ressource), $parents);
    		}
     
    		return $this ;
    	}
     
    	protected function _setPrivileges($role, $privileges)	{
    		foreach ($privileges as $do => $ressources)	{
    			foreach ($ressources as $ressource => $actions)	{
    				if (empty($actions))	{
    					$actions = null ;
    				} else {
    					$actions = explode(',', $actions) ;
    				}
     
    				$this->{$do}($role, $ressource, $actions);
    			}
    		}
     
    		return $this ;
    	}
    }

    et voila ce que j'ai ajouter a mon fichier Boostrap.php :

    $acl_ini = '../config/acl.ini' ;
    $acl = new My_Acl_Ini($acl_ini) ;


    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
    <?php
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
     
    	protected function _initAutoload()
    	{
    		$moduleLoader = new Zend_Application_Module_Autoloader(array(
    			'namespace' => '',
    			'basePath' => APPLICATION_PATH));
     
    		return $moduleLoader;
     
    	}
     
    	    protected function _initControllersPlugins()
        {
            	$acl_ini = './configs/acl.ini' ;  
    $acl  = new My_Acl_Ini($acl_ini) ;
    $front->registerPlugin(new My_Controller_Plugin_Auth($acl)) ; 
     
        }	
     
    	protected function _initViewHelpers()
    {
        $this->bootstrap('layout');
        $layout = $this->getResource('layout');
        $view = $layout->getView();
        $view->doctype('XHTML1_STRICT');
        $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
        $view->headTitle()->setSeparator(' - ');
        $view->headTitle('Application CDG Gestion de Stock');
    }
    .......
    j'ai une erreur Class 'My_Acl_Ini' not found in C:\wamp\www\CDG.1.1\application\Bootstrap.php on line 19

    Apres qu'est ce que je doit ajouter ???

  3. #3
    Modérateur

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

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 505
    Par défaut
    Tu as bien déclaré 'My_' dans ton fichier application.ini ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ; Espaces d'autoload à charger
    autoloadernamespaces[] = "My_"

Discussions similaires

  1. Tuto pour mettre en place un carnet d'adresses partagé Win 2008 r2 AD
    Par hellomorld dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 12/08/2014, 05h33
  2. [DW MX] Problème pour mettre en ligne le site
    Par monadali dans le forum Dreamweaver
    Réponses: 9
    Dernier message: 07/11/2007, 08h40
  3. Réponses: 1
    Dernier message: 16/05/2007, 20h31
  4. Problème pour mettre un TChart sur QReport pour l'impression
    Par ghan77 dans le forum Composants VCL
    Réponses: 14
    Dernier message: 25/01/2006, 13h28
  5. Probléme pour mettre un renommer dynamiquement les colonnes
    Par bragon dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 10h47

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