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 :

ACL et modules


Sujet :

Zend_Acl & Zend_Auth PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 21
    Points
    21
    Par défaut ACL et modules
    Bonjour,

    Je suis en train de développer un petit CMS avec Zend Framework

    Voici la structure de mon application:

    application/

    backend/

    controllers/
    views/
    default/

    controllers/
    views/
    frontend/

    controllers/
    views/
    models/
    config.ini
    doc/
    library/
    public/
    index.php
    MyAcl.php
    Auth.php

    Il y a donc des controlleurs de même nom (indexController), mais dans des modules différents.

    Mon probleme est le suivant : Comment définir les ACL en fonction de mes modules/controlleur/action plutot qu'avec controlleur/action ?

    Par exemple : la méthode indexAction de indexController est accessible a tout utilisateur dans le module "frontend" et "default", et est seulement accessible a admin dans le module "backend".

    Voici mes fichier d'ACL :

    bootstrap (index.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
     
    // Création de l'objet Acl
    	$acl = new MyAcl($auth);
     
    	// setup controller
    	$frontController = Zend_Controller_Front::getInstance();
    	$frontController->throwExceptions(true);
    	$frontController->setControllerDirectory('./application/controllers');
    	$frontController->registerPlugin(new Auth($auth, $acl));
    	$frontController->setControllerDirectory(array(
    	      'default' 	=> './application/default/controllers',
    	      'frontend' 	=> './application/frontend/controllers',
    	      'backend'    	=> './application/backend/controllers'
    	));
    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
     
    <?php
     
    class MyAcl extends Zend_Acl
    {
        public function __construct(Zend_Auth $auth)
        {
            $roleGuest = new Zend_Acl_Role('guest');
     
    		$default = new Zend_Acl_Resource('default');
            $this->add($default);
    		$this->add(new Zend_Acl_Resource('index'),$default);
     
            $frontend = new Zend_Acl_Resource('frontend');
            $this->add($frontend);
    		$this->add(new Zend_Acl_Resource('frontend/index'),$frontend);
     
            $backend = new Zend_Acl_Resource('backend');
            $this->add($backend);
    		$this->add(new Zend_Acl_Resource('backend/index'),$backend);
     
            $this->addRole(new Zend_Acl_Role('guest'));
            $this->addRole(new Zend_Acl_Role('author'), 'guest');
            $this->addRole(new Zend_Acl_Role('admin'), 'author');
            $this->addRole(new Zend_Acl_Role('root'), 'admin');
     
            // Droits d'acces
            $this->allow('guest');
        }
     
    }
     
    ?>
    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
     
    <?php
     
    class Auth extends Zend_Controller_Plugin_Abstract
    {
        private $_auth;
        private $_acl;
     
        private $_noauth = array('module' => 'default',
                                 'controller' => 'index',
                                 'action' => 'noauth');
     
        private $_noacl = array('module' => 'default',
                                'controller' => 'index',
                                'action' => 'noacl');
     
        public function __construct($auth, $acl)
        {
            $this->_auth = $auth;
            $this->_acl = $acl;
        }
     
    	public function preDispatch(Zend_Controller_Request_Abstract $request)
    	{
            if ($this->_auth->hasIdentity()) {
                $temp = $this->_auth->getIdentity()->niveau_user;
                $role = "guest";
                if($temp == 1) $role = "guest";
                if($temp == 2) $role = "author";
                if($temp == 3) $role = "admin";
                if($temp == 4) $role = "root";
            } else {
                $role = 'guest';
            }
     
        	$controller = $request->controller;
        	$action = $request->action;
        	$module = $request->module;
    		$resource = $controller;
     
        	if (!$this->_acl->has($resource)) {
            	$resource = null;
        	}
     
            if (!$this->_acl->isAllowed($role, $resource, $action)) {
                if (!$this->_auth->hasIdentity()) {
                    $module = $this->_noauth['module'];
                    $controller = $this->_noauth['controller'];
                    $action = $this->_noauth['action'];
                } else {
    				$module = $this->_noacl['module'];
                    $controller = $this->_noacl['controller'];
                    $action = $this->_noacl['action'];
    			}
            }
     
    		$request->setModuleName($module);
    		$request->setControllerName($controller);
    		$request->setActionName($action);
    	}
    }
     
    ?>
    Merci d'avance pour votre aide

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    J'ai l'impression que tu as déjà fait la moitié du chemin tout seul...

    Tu as déjà défini des ressources sous la forme 'module/controlleur', par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->add(new Zend_Acl_Resource('frontend/index'),$frontend);
    Je pense qu'il 'suffit' de systématiser cette solution, et d'interroger tes acl avec des ressources qui correspondent à ce schéma... Donc, faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $controller = $request->controller;
    $action = $request->action;
    $module = $request->module;
    $resource = $module.'/'.$controller;
     
    if (!$this->_acl->isAllowed($role, $resource, $action)) {

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    Un grand merci, ca fonctionne ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ZF 1.11] Organisation, fonctionnement modules (Liaison avec Acls authentification)
    Par SempreD dans le forum Zend Framework
    Réponses: 0
    Dernier message: 21/05/2012, 12h21
  2. Module FTP.pm ?
    Par MSP dans le forum Modules
    Réponses: 4
    Dernier message: 04/08/2003, 15h49
  3. module Find
    Par martijan dans le forum Modules
    Réponses: 8
    Dernier message: 09/07/2003, 11h07
  4. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44
  5. PerlDoc sur une fonction d'un module
    Par lesouriciergris dans le forum Modules
    Réponses: 2
    Dernier message: 13/03/2003, 20h50

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