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 de reconnaissance de Plugin ACL


Sujet :

Zend_Acl & Zend_Auth PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 24
    Par défaut Problème de reconnaissance de Plugin ACL
    Bonjour,
    je rouvre un nouveau sujet, à cause d'un nouveau problème.

    j'utilise un plugin pour le contrôle des droits d'accès, mais je me retrouve avec cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Class 'Default_Controller_Plugin_Acl' not found in /var/www/trinis.fourmi-tek.org/application/Bootstrap.php on line 37
    mon architecture est construit de cette façon, peut être es-ce une erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    --Application
         -Controllers
           -Authcontroller.php
         -Acls
            -MyAcl.php
         -Plugins
             -Acl.php
    ....
    Le code de mon Plugin :
    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
    98
     
    <?php
    class Default_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
    {
    	//tableau associatif reprenant les infos utilisées pour le lien
    	//si l'utilisateur n'est pas authentifié
    	private $_noauth = array(
    		'module' => 'default',
    		'controller' => 'login',
    		'action' => 'index'
    	);
     
    	//tableau associatif reprenant les infos utilisées pour le lien
    	//si l'utilisateur est authentifié mais qu'il n'a pas les droits d'accès
    	private $_noacl = array(
    		'module' => 'default',
    		'controller' => 'error',
    		'action' => 'deny'
    	);
     
    	//la méthode événementielle preDispatch(), définie par ZF, est exécutée
    	//avant qu'une action ne soit distribuée
    	public function preDispatch(Zend_Controller_Request_Abstract $request)
    	{
    		$acl = null;
    		$role = null;
     
    		//vérification de l'enregistrement de l'ACL (cf. application/acls/MyAcl.php)
    		if(Zend_Registry::isRegistered('My_Acl'))
    		{
    			//récupération de l'ACL
    			$acl = Zend_Registry::get('My_Acl');
    		}
    		else
    		{
    			throw new Zend_Controller_Exception("Acl not defined !");
    		}
     
    		//récupération de l'instance d'identification
    		//la classe Zend_Auth permet de définir les adaptateurs d'authentification
    		//un adpatateur permet de définir le service d'authentification,
    		//dans notre cas, une base de données
    		$auth = Zend_Auth::getInstance();
     
    		//permet de vérifier si une identité est correctement identifiée
    		if($auth->hasIdentity())
    		{
    			//récupération du role (via la database)
    			$role = $auth->getIdentity()->role;
    		}
    		else
    		{
    			//si l'utilisateur n'est pas authentifié
    			//on définit le rôle par défaut, guest
    			$role = 'guest';
    		}
     
    		//récupération du module, contrôleur et action demandés par la requête
    		//comme nous avons utilisé les contrôleurs comme ressource,
    		//nous stockons le contrôleur demandé dans la requête dans la variable $ressource
    		$module = $request->getModuleName();
    		$controller = $ressource = $request->getControllerName();
    		$action = $request->getActionName();
     
    		//vérification que le contrôleur est définit dans l'ACL
    		if(!$acl->has($controller))
    		{
    			$ressource = null;
    		}
     
    		//si l'accès n'est pas permis, nous allons modifier la requête
    		//en modifiant le module, le contrôleur et l'action
    		if(!$acl->isAllowed($role, $ressource, $action))
    		{
    			//si pas authentifié
    			if(!$auth->hasIdentity())
    			{
    				//$request->setParam('redirect', $module . '/' . $controller . '/' . $action);
    				$module = $this->_noauth['module'];
    				$controller = $this->_noauth['controller'];
    				$action = $this->_noauth['action'];
    			}
    			else
    			{
    				//si pas autorisé
    				$module = $this->_noacl['module'];
    				$controller = $this->_noacl['controller'];
    				$action = $this->_noacl['action'];
    			}
    		}
     
    		//définition des du module, du contrôleur et de l'action
    		//qui sera ùaintenant routée
    		//$request->setModuleName($module);
    		$request->setControllerName($controller);
    		$request->setActionName($action);
    	}
    }
    Le code de 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    <?php
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
     
    	protected function _initDoctype()
    	{
    		$this->bootstrap('view');
    		$view = $this->getResource('view');
    		$view->doctype('XHTML1_STRICT');
    	}
     
    	protected function _initAutoloadRessource()
    	{
    		//configuration de l'Autoload
    		$ressourceLoader = new Zend_Loader_Autoloader_Resource(array(
    			'namespace' => 'Default',
    			'basePath'  => dirname(__FILE__),
    		));
     
    		//permet d'indiquer les répertoires dans lesquels se trouveront nos classes:
    		//notamment, l'ACL et le pugin
    		$ressourceLoader->addResourceType('form', 'forms/', 'Form')
    		->addResourceType('acl', 'acls/', 'Acl')
    		->addResourceType('model', 'models/', 'Model')
    		->addResourceType('plugin', 'plugins/', 'Controller_Plugin');
     
    		return $ressourceLoader;
    	}
     
    	protected function _initAcl()
    	{
    		//Création d'une instance de notre ACL
    		$acl = new Default_Acl_MyAcl();
     
    		//enregistrement du plugin de manière à ce qu'il soit exécuté
    		Zend_Controller_Front::getInstance()->registerPlugin(new Default_Controller_Plugin_Acl());
     
    		//permet de définir l'acl par défaut à l'aide de vue, de cette manière
    		//l'ACL est accessible dans les vues
    		Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl);
     
    		//vérifie si une identité existe et applique le rôle
    		$auth = Zend_Auth::getInstance();
    		$role = (!$auth->hasIdentity()) ? 'guest' : $auth->getIdentity()->role;
    	}
    }
    Merci de votre aide,
    cordialement,
    chocofusee,

    PS : Merci de m'indiquer si je fait du double poste.

  2. #2
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Bonsoir,
    Généralement les plugins sont mis dans le dossier library ou tu crée ta propre librairie et tu fais comme pour la librairie Zend.

    Sinon vu où tu as mis ton fichier ça devrait etre :
    ou
    Du coup il faut que tu modifies le nom et de la classe ainsi que les appels

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 24
    Par défaut
    donc faudrait que je fasse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    --library
        --Plugins
          --acl.php
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    --library
     --Zend
        --Plugins
          --acl.php

  4. #4
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Comme ton deuxieme exemple mais pas Zend faut que ca soit ta library et le nom de tes fichier commencerons par ce nom comme pour Zend

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 24
    Par défaut
    Merci, sa marche parfaitement.
    Par contre j'ai un nouveau problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Trying to get property of non-object in /var/www/trinis.fourmi-tek.org/application/Bootstrap.php on line 46 Notice: Trying to get property of non-object in /var/www/trinis.fourmi-tek.org/application/Plugins/acls/Myacl.php on line 48

  6. #6
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Fais nous voir le code de Myacl.php

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 24
    Par défaut
    Myacl.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
     
    <?php
    class Default_Acl_MyAcl extends Zend_Acl
    {
    	//constructeur
    	public function __construct()
    	{
    		$this->_initRessources();
    		$this->_initRoles();
    		$this->_initRights();
     
    		//Zend_Registry permet de gérer une collection de valeurs qui
    		//sont peuvent être accessibles n'importe où dans notre application
    		//ont peut comparer son fonctionnement à une variable globale
    		Zend_Registry::set('My_Acl', $this);
    	}
     
    	protected function _initRessources()
    	{
    		//création des ressources
    		//une ressource correspond à un élément pour lequel l'accès est contrôlé
    		//ici, nous créons une ressource par contrôleur, ce qui signifie
    		//que nous allons contrôler l'accès à nos contrôleurs
    		//la méthode addRessource() permet d'ajouter les ressources à l'ACL
    		$this->addResource(new Zend_Acl_Resource('index'));
    		$this->addResource(new Zend_Acl_Resource('error'));
    		$this->addResource(new Zend_Acl_Resource('auth'));
    		$this->addResource(new Zend_Acl_Resource('espacepro'));
    	}
     
    	protected function _initRoles()
    	{
    		//création des rôles
    		//un rôle est un objet qui demande l'accès aux ressources
    		//nous allons, ici, utiliser 3 rôles:
    		//  - guest: compte invité avec des droits limités
    		//  - reader: simple accès en lecture
    		//  - admin: accès total au site (lecture écriture
    		$guest = new Zend_Acl_Role('guest');
    		$reader = new Zend_Acl_Role('reader');
    		$admin = new Zend_Acl_Role('admin');
     
    		//ajout des rôles à l'ACL avec la méthode addRole()
    		//le premier argument est le rôle à ajouter à l'ACL
    		//le second argument permet d'indiquer l'héritage du groupe parent
    		//reader va hériter des droits de guest
    		//admin va hériter des droits de reader
    		$this->addRole($guest);
    		$this->addRole($reader, $guest);
    		$this->addRole($admin, $reader);
    	}
     
    	protected function _initRights()
    	{
    		//définition des règles
    		//la méthode allow permet d'indiquer les permissions de chaque rôle
    		//le premier argument permet de définir le rôl pour qui la régle est écrite
    		//le second argument permet d'indiquer les contrôleurs
    		//le troisième indique les actions du contrôleur
    		//à noter qu'il aussi possible de refuser un accès grâce à la fonction deny()
    		$this->allow('guest', array('index', 'error', 'auth'));
    		$this->allow('reader', 'espacepro', 'index');
    		$this->allow('admin');
    	}
    }

  8. #8
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Je pense que dans ton contructeur il te manque
    Par contre vérifie si il prends des argument dans ce cas fait pareil.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 24
    Par défaut
    j'ai re-modifier 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    class Default_Acl_MyAcl extends Zend_Acl
    {
    	//constructeur
    	public function parent::__construct()
    	{
    		$this->_initRessources();
    		$this->_initRoles();
    		$this->_initRights();
     
    		//Zend_Registry permet de gérer une collection de valeurs qui
    		//sont peuvent être accessibles n'importe où dans notre application
    		//ont peut comparer son fonctionnement à une variable globale
    		Zend_Registry::set('My_Acl', $this);
    	}
     
    	protected function _initRessources()
    	{
    		//création des ressources
    		//une ressource correspond à un élément pour lequel l'accès est contrôlé
    		//ici, nous créons une ressource par contrôleur, ce qui signifie
    		//que nous allons contrôler l'accès à nos contrôleurs
    		//la méthode addRessource() permet d'ajouter les ressources à l'ACL
    		$this->addResource(new Zend_Acl_Resource('index'));
    		$this->addResource(new Zend_Acl_Resource('error'));
    		$this->addResource(new Zend_Acl_Resource('auth'));
    		$this->addResource(new Zend_Acl_Resource('espacepro'));
    	}
    je vois pas trop d'ou sa viens

  10. #10
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Le code que je t ai mis c etait au debut de ton constructeur et non pas ce que tu as fais faut etre logique un peu

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 24
    Par défaut
    Oups..., mais aucun changement.

    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
     
    <?php
    class Default_Acl_MyAcl extends Zend_Acl
    {
    	//constructeur
    	public function __construct()
    	{
    		parent::__construct();
    		$this->_initRessources();
    		$this->_initRoles();
    		$this->_initRights();
     
    		//Zend_Registry permet de gérer une collection de valeurs qui
    		//sont peuvent être accessibles n'importe où dans notre application
    		//ont peut comparer son fonctionnement à une variable globale
    		Zend_Registry::set('My_Acl', $this);
    	}
     
    	protected function _initRessources()
    	{
    		//création des ressources
    		//une ressource correspond à un élément pour lequel l'accès est contrôlé
    		//ici, nous créons une ressource par contrôleur, ce qui signifie
    		//que nous allons contrôler l'accès à nos contrôleurs
    		//la méthode addRessource() permet d'ajouter les ressources à l'ACL
    		$this->addResource(new Zend_Acl_Resource('index'));
    		$this->addResource(new Zend_Acl_Resource('error'));
    		$this->addResource(new Zend_Acl_Resource('auth'));
    		$this->addResource(new Zend_Acl_Resource('espacepro'));
    	}
     
    	protected function _initRoles()
    	{
    		//création des rôles
    		//un rôle est un objet qui demande l'accès aux ressources
    		//nous allons, ici, utiliser 3 rôles:
    		//  - guest: compte invité avec des droits limités
    		//  - reader: simple accès en lecture
    		//  - admin: accès total au site (lecture écriture
    		$guest = new Zend_Acl_Role('guest');
    		$reader = new Zend_Acl_Role('reader');
    		$admin = new Zend_Acl_Role('admin');
     
    		//ajout des rôles à l'ACL avec la méthode addRole()
    		//le premier argument est le rôle à ajouter à l'ACL
    		//le second argument permet d'indiquer l'héritage du groupe parent
    		//reader va hériter des droits de guest
    		//admin va hériter des droits de reader
    		$this->addRole($guest);
    		$this->addRole($reader, $guest);
    		$this->addRole($admin, $reader);
    	}
     
    	protected function _initRights()
    	{
    		//définition des règles
    		//la méthode allow permet d'indiquer les permissions de chaque rôle
    		//le premier argument permet de définir le rôl pour qui la régle est écrite
    		//le second argument permet d'indiquer les contrôleurs
    		//le troisième indique les actions du contrôleur
    		//à noter qu'il aussi possible de refuser un accès grâce à la fonction deny()
    		$this->allow('guest', array('index', 'error', 'auth'));
    		$this->allow('reader', 'espacepro', 'index');
    		$this->allow('admin');
    	}
    }

Discussions similaires

  1. [Plugin][VE] Problème d'installation du plugin Visual Editor
    Par bigben09 dans le forum Eclipse Java
    Réponses: 13
    Dernier message: 15/11/2007, 22h03
  2. problème d'importation de plugin
    Par legolas38 dans le forum Eclipse Platform
    Réponses: 6
    Dernier message: 17/05/2006, 17h21
  3. Problème de reconnaissance javascript vbscript
    Par mouste79 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/05/2006, 19h12
  4. [Plugin] problème d'utilisation de plugin
    Par seiryujay dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 24/03/2006, 11h53
  5. [FLASH MX2004] Problème de reconnaissance des caractères
    Par Spikefreeman dans le forum Flash
    Réponses: 10
    Dernier message: 04/01/2005, 23h08

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