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 21/06/2011, 13h05   #1
Invité de passage
 
Inscription : septembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 7
Points : 0
Points : 0
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.
zakaria340 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 10h34   #2
Invité de passage
 
Inscription : septembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 7
Points : 0
Points : 0
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 :
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 :
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 :
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 :
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 ???
zakaria340 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 20h32   #3
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 174
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 174
Points : 6 460
Points : 6 460
Tu as bien déclaré 'My_' dans ton fichier application.ini ?

Code :
1
2
3
 
; Espaces d'autoload à charger
autoloadernamespaces[] = "My_"
MaitrePylos 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 22h48.


 
 
 
 
Partenaires

Hébergement Web