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 ???