Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Acl & Zend_Auth
Zend_Acl & Zend_Auth Forum d'entraide pour les composants Zend_Acl & Zend_Auth du Zend Framework (contrôle d'accès, gestion des droits, authentification, etc.). Avant de poster -> Cours Zend_Acl et Zend_Auth.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2011, 13h03   #1
Invité de passage
 
Homme Mathieu
Inscription : août 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 13
Points : 1
Points : 1
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 :
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 :
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 :
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 :
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.
chocofusee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 21h19   #2
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
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
5h4rk est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 21h51   #3
Invité de passage
 
Homme Mathieu
Inscription : août 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 13
Points : 1
Points : 1
donc faudrait que je fasse :

Code :
1
2
3
4
 
--library
    --Plugins
      --acl.php
ou

Code :
1
2
3
4
5
 
--library
 --Zend
    --Plugins
      --acl.php
chocofusee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 23h41   #4
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
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
5h4rk est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 00h09   #5
Invité de passage
 
Homme Mathieu
Inscription : août 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 13
Points : 1
Points : 1
Merci, sa marche parfaitement.
Par contre j'ai un nouveau problème :
Code :
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
chocofusee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 08h50   #6
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Fais nous voir le code de Myacl.php
5h4rk est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 13h36   #7
Invité de passage
 
Homme Mathieu
Inscription : août 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 13
Points : 1
Points : 1
Myacl.php :
Code :
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');
	}
}
chocofusee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 18h05   #8
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Je pense que dans ton contructeur il te manque
Par contre vérifie si il prends des argument dans ce cas fait pareil.
5h4rk est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 19h26   #9
Invité de passage
 
Homme Mathieu
Inscription : août 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 13
Points : 1
Points : 1
j'ai re-modifier comme ceci :

Code :
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
chocofusee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 19h39   #10
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
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
5h4rk est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 19h50   #11
Invité de passage
 
Homme Mathieu
Inscription : août 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 13
Points : 1
Points : 1
Oups..., mais aucun changement.

Code :
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');
	}
}
chocofusee est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h46.


 
 
 
 
Partenaires

Hébergement Web