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 Framework PHP Discussion :

Zend Acl gestion des autorisations sur les actions


Sujet :

Zend Framework PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Zend Acl gestion des autorisations sur les actions
    Bonjours a tous,

    Me penchant actuellement sur Zend_Acl je suis actuellement un peut bloquez ! Voila l'histoire :

    Avec Zend_Auth j'ai fait mon formulaire d'identification -> OK
    J'ai creer dans ma BDD les users avec les roles -> OK
    Fait un plugin pour vérifier a chaque action si il a le droit -> OK

    En suivant different tuto et le guide de Zend framework j'ai mis dans mon bootstrap ma config pour les Acl. J'ai définie mes rôle, mes ressources, et mes autorisations.

    Voila ce que je souhaite faire: que le visiteur puisse voir la page index du site, la page index de mon blog la page index de mon cv, et la page index de photo et qq actions lier au controller photo aussi et restreindre les autres action.
    Exemple:
    Mon BlogController -> indexAction -> index.phtml
    -> ajouterAction -> ajouter.phtml
    -> addAction -> add.phtml

    Mon visiteur peut voir index.phtml mais ne peut pas accéder au action ajouter et add sans être identifier.

    Le souci c'est que j'ai beau faire de allow ou des deny il ne sont pas pris en compte et du coup me demande de m'identifier pour accéder a l'index du blog.
    Je mais si dessous mes différents
    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
    <?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 _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(' Tutoriel Zend Framework');
    	}
     
    	protected function _initZendAcl()
        {
        	$ZendAcl = new Zend_Acl();
     
            $ZendAcl->add(new Zend_Acl_Resource('index'));
            $ZendAcl->add(new Zend_Acl_Resource('blog'));
            $ZendAcl->add(new Zend_Acl_Resource('cv'));
    	$ZendAcl->add(new Zend_Acl_Resource('auth'));
    	$ZendAcl->add(new Zend_Acl_Resource('photo'));
     
     
            $ZendAcl->addRole(new Zend_Acl_Role('guest')); 
            $ZendAcl->addRole(new Zend_Acl_Role('member'));
            $ZendAcl->addRole(new Zend_Acl_Role('admin'));
     
     
     
    		$ZendAcl->allow('guest', 'blog','index');
    		$ZendAcl->allow('guest', 'index');
     
     
    		$ZendAcl->allow('member');
     
    		$ZendAcl->allow('admin');
     
    		echo $ZendAcl->isAllowed('guest', 'blog', 'index') ? 'allowed' : 'denied'; //allowed
     
            return $ZendAcl;
        }
     
    }
    codes :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
     
    <?php 
    class Plugin_Authentication extends Zend_Controller_Plugin_Abstract
    {
     
    	public function routeShutdown(Zend_Controller_Request_Abstract $request)
        {
    		$auth = Zend_Auth::getInstance();
    		$acl = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('ZendAcl');
     
     
    		//($auth->hasIdentity() AND !$acl->isAllowed($auth->getIdentity()->roles, $request->getControllerName())) OR !$acl->isAllowed('guest', $request->getControllerName()
     
    		if(((!$auth->hasIdentity() OR !$acl->isAllowed($auth->getIdentity()->role, $request->getControllerName())) AND !$acl->isAllowed('guest', $request->getControllerName()))) 
    		{
    			/*Zend_Debug::dump($auth->getIdentity()->roles);
    			Zend_Debug::dump($request->getControllerName());
    			Zend_Debug::dump($acl->isAllowed($auth->getIdentity()->roles, $request->getControllerName()));
    			die();*/
     
    			$request->setControllerName('auth')->setActionName('login');
    			// 
    		}
        }
     
    }
    code : Plugin d'authentification

    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
     
    <?php
    class BlogController extends Zend_Controller_Action
    {
     
        public function init()
        {
            if(Zend_Auth::getInstance()->getIdentity())
       		{
            $this->view->membres = Zend_Auth::getInstance()->getIdentity()->last_name;
       		}
       		else
       		$this->view->membres = 'Invite';
        }
     
        public function indexAction()
    	{
    		$article = new Model_DbTable_Blog();
    		$this->view->article = $article->fetchAll(null, "id DESC");
    	}
     
    	public function ajouterAction()
        {
           $this->view->blog = $this->_getBlogForm();
        }
     
    	public function addAction()
    	{
    	$Form_Blog = $this->_getBlogForm();
    	if($Form_Blog->isValid($_POST))
    		{
    			$Model_DbTable_Blog = new Model_DbTable_Blog();
    			$dataas = $Form_Blog->getValues();
     
     
    			$Model_DbTable_Blog->insert($dataas);
     
    		}
    		else {
    			$this->view->blog = $Form_Blog;
    			$this->render('index');
    		}
    	}
     
    	private function _getBlogForm()
    	{
    		$Form_Blog = new Form_Blog;
    		return $Form_Blog->setAction($this->_helper->url('add'));
    	}
    }
    code : BlogController

    Dite moi si il manque des infos pour comprendre la situation et merci d'avance pour l'aide

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour,

    ton login identification devrais plus ressemblé à 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
     
    class My_Login_Connexion extends Zend_Controller_Plugin_Abstract {
     
        public function preDispatch(Zend_Controller_Request_Abstract $request) {
     
            if(!Zend_Auth::getInstance()->hasIdentity()) {
     
                $request->setControllerName('Login');
                $request->setActionName('index');
     
            }
     
        }
     
    }
    de plus tu ne dis pas comment est connecté l'utilisateur, à quelle moment lui donnes tu le rôle de 'guest', il te manque un plugin de ce genre

    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
     
    class My_Acl_Plugin extends Zend_Controller_Plugin_Abstract {
     
        private $_auth = null;
        private $_acl = null;
     
     
        public function __construct($auth, $acl) {
            $this->_auth = $auth;
            $this->_acl = $acl;
        }
     
        public function init(Zend_Controller_Request_Abstract $request) {
     
            $role = 'guest';
     
            if ($this->_auth->hasIdentity()) {
                $role = $this->_auth->getIdentity()->log_acl;
            }
     
            $controller = $request->controller;
            $action     = $request->action;
            $module     = $request->module;
            $resource   = $this->_acl->has($controller) ? $controller : null;
     
            if (!$this->_acl->isAllowed($role, $resource, $action)) {
                $request->setControllerName('Error');
                $request->setActionName('deny');
            }
     
        }
     
    }

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Pour déterminer si il y a un utilisateur connecteur tout ce passe dans mon plugin

    J'utilise mon route shutdown : et fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(((!$auth->hasIdentity() OR !$acl->isAllowed($auth->getIdentity()->role, $request->getControllerName())) AND !$acl->isAllowed('guest', $request->getControllerName())))
    Si je ne suis pas identifier ou que je n'ai pas de droit je suis envoyer vers mon formulaire de connection et si je n'ai pas de droit alors j'obtiens le statut et les doits de guest(visiteur).

    Mais ma question et plus sur le fais de comment restreindre des actions d'un controller sur un utilisateur.

Discussions similaires

  1. Gestion des erreurs sur les noms des villes
    Par yosryosr dans le forum Pascal
    Réponses: 3
    Dernier message: 18/04/2008, 11h52
  2. gestions des erreurs sur les Noms des villes
    Par yosryosr dans le forum Langage
    Réponses: 2
    Dernier message: 15/04/2008, 12h07
  3. Gestion des autorisations sur WSS 3
    Par Parkman dans le forum SharePoint
    Réponses: 1
    Dernier message: 07/02/2008, 10h12
  4. Réseau d'entreprise : Gestion des n° sur les switch
    Par snoopy69 dans le forum Windows XP
    Réponses: 1
    Dernier message: 24/04/2007, 11h16
  5. [c#] gestion des droits sur les fichiers
    Par mrrenard dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/11/2006, 11h50

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