Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-02-2009 17:36:59

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

[résolu][Zend ACL & Assertion]Problème d'assertion

bonjour,

j'utilise le système classic d'ACL simple (http://alain-sahli.developpez.com/tutor … ework/acl/)
j'ai un souci au niveau des assertions :

je veut que l'utilisateur ne modifie ou supprime que ce qu'il a creé :

donc j'ai juste au niveau du predispatch accés a l'id (de l'actu, de la photos, ...) et bien sur a l'auth

Mon souci c'est récupérer déja l'id, mon acl est initialisé dans le bootstrap :

Code:

$acl1 = new MyAcl($auth1);

donc a quel niveau je doit récuperer l'id ? (question déja posé, mais je vois toujours pas)

dans le Plugin (preDispatch), ou ActuAssertion (implements Zend_Acl_Assert_Interface, si c'est possible).

je pense que je dois déplacer l'initialisation de MyAcl dans le plugin pour pouvoir récuperer $request, donc id.

merci

Dernière modification par baboune (10-02-2009 11:42:19)

Hors ligne

 

#2 09-02-2009 21:20:38

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [résolu][Zend ACL & Assertion]Problème d'assertion

la je vois pas ou plus. j'ai essayé partout (plugin et assert) quand $acl1 = new MyAcl($auth1); était dans mon bootstrap :

Code:

Zend_Front_Controller::getRequest()->getParam('id');
erreur : Class 'Zend_Front_Controller' not found

j'ai déplacé la déclaration de mon acl dans mon plugin :

Code:

class My_Plugin_PluginAuth extends Zend_Controller_Plugin_Abstract
{    
    private $_auth;
    private $_user;
    
    private $_noroute = array('module' => 'default',
                             'controller' => 'error',
                             'action' => 'index');

    public function __construct($auth1, $user=>user de phpBB)
    {
        $this->_auth = $auth1;
        $this->_user = $user;
    }

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {        
        global $phpbb_root_path, $phpEx, $user, $auth, $db, $config, $cache, $template;
        // c'est pour PhpBB

        $dispatcher = Zend_Controller_Front::getInstance();    
        
        $controller = $request->getControllerName();
        $action = $request->getActionName();
        $module = $request->getModuleName();
        $resource = $module.'/'.$controller;
        $acl1 = new MyAcl($this->_auth , $request->getParam('id'));
        et même comme ça : $acl1 = new MyAcl($this->_auth , $request->_getParam('id'));

je fait un var_dump($id) dans mon ActuAssertion implements Zend_Acl_Assert_Interface
(j'ai une erreur "Cannot send headers; headers already sent" mais je voit quand même ma valeur, je sais pas si ça peut faussé la valeur)
et j'ai toujours NULL !
pourtant elle s'affiche dans le plugin

Code:

var_dump($request->getParam('id'));
=> string(2) "19" string(2) "19", en revanche c'est en double !

je sais plus quoi tenter ou faire.

Mon ACL :

Code:

class MyAcl extends Zend_Acl
{
    public function __construct(Zend_Auth $auth1, $params)
    {
        ...........
        $this->allow('member', 'actualite/index', 'supprimer', new ActuAssertion($params));

Mon Assert

Code:

class ActuAssertion implements Zend_Acl_Assert_Interface
{
    public $itemId = null;
    public function __construct($param)
    {
        $this->itemId = $param;
    }
    
    public function isAllowed()
    {
        // Vérifie posterMemberId and currentMemberId
        $auth = Zend_Auth::getInstance();
        var_dump($this->itemId);
        if ($auth->hasIdentity())
        {
            if (.........)
            {
                return true;
            }     
            if ($auth->getIdentity()->role_acl == "admin") {
                return true;
            }
        }
        return false;
    }

    public function assert(Zend_Acl $acl, Zend_Acl_Role_Interface $role = null,
                           Zend_Acl_Resource_Interface $resource = null, $privilege = null)
    {
        return $this->isAllowed();
    }
    
}

Dernière modification par baboune (09-02-2009 21:27:12)

Hors ligne

 

#3 09-02-2009 21:36:14

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [résolu][Zend ACL & Assertion]Problème d'assertion

var_dump($request->getParam('id'));
=> string(2) "19" string(2) "19", en revanche c'est en double !

c'est a cause de l'error "Cannot send headers; headers already sent" il est rediriger vers le controller error.

Dernière modification par baboune (09-02-2009 21:36:51)

Hors ligne

 

#4 10-02-2009 11:43:17

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [résolu][Zend ACL & Assertion]Problème d'assertion

a première vue c'était une erreur d'apache, j'ai rien changer et ce matin ça fonctionne !

Hors ligne

 

#5 22-02-2009 14:52:04

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [résolu][Zend ACL & Assertion]Problème d'assertion

Bonjour, et excusez moi je reviens encore sur les assertions qui me pose problème.

j'ai dans une vue, une liste de commentaires, le gros souci c'est de pouvoir récuperer ce fameux id du commentaire pour savoir si celui-ci a était ecrit pas l'utilisateur en cours afin de lui donné les droits de le modifier et de le supprimer.

Le souci c'est que la requette est effectué dans le controller, et que je liste dans ma vue (foreach)  tous mes commentaires. donc je n'ai pas accés au parametre id_commentaire, ni dans l'URL, ni dans le controller, uniquement dans la vue. Mon ACL est déclaré dans mon bootstrap. je ne voit pas comment transmetre l'id du commentaire a mon ACL.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages