Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-03-2008 17:48:39

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

[Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

Bonjour,

Je viens enfin de réussir à gerer la partir authentification/gestion des droits de mon appli.
Tout fonctionne bien, mais il me reste à gerer l'affichage des liens vers les différentes actions (modifier |supprimer & co)

Vous avez un technique de sioux pour le faire ou vous le faites directement dans la vue en faisant un

Code:

    <?php
    $acl = Zend_Registry::get('ACL');
    if($acl->isAllowed($this->user->role, 'index', 'ajouter'))
    {
?>        
        <td>
            <a href="<?php echo $this->baseUrl; ?>/index/modifier/id/<?php echo $album->id;?>">Modifier</a>
            <a href="<?php echo $this->baseUrl; ?>/index/supprimer/id/<?php echo $album->id;?>">Supprimer</a>
        </td>
<?php 
    }
}
?>

En ayant bien sur ajouté mon objet Acl au registre dans le bootstrap ... (d'ailleurs est ce une bonne idée ? devrais je aussi y ajouter mon objet $auth ?)
En gros l'utilité du registre est une deuxieme question big_smile , quels objets y stockez vous ?

PS: Ce n'est qu'un exemple car comme vous le voyez si on a le droit de 'ajouter', le bouton supprimer s'affiche aussi mais j'avais la flemme de le faire pour le bouton supprimer pour l'exemple :p

Dernière modification par sebondus (27-03-2008 17:50:09)

Hors ligne

 

#2 28-03-2008 00:04:32

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

Salutation.
Pas de technique de sioux, mais un view helper: url() (cf. doc du zf smile )
Et sinon, tu peux te passer de ça <?php echo $this->baseUrl; ?> (car le helper donne des urls absolus, sans le nom de domaine) en utilisant la balise <base> html, tu vas kiffer.

Pour le registre, tout et n'importe quoi! Enfin perso, j'ai toutes mes classes métiers instanciés dans une classe model que je met dans le registre, c'est un peu bourrin, mais dès fois ça aide bien smile

Hors ligne

 

#3 30-03-2008 17:29:39

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

Mr.MoOx a écrit:

Salutation.
Pas de technique de sioux, mais un view helper: url() (cf. doc du zf smile )
Et sinon, tu peux te passer de ça <?php echo $this->baseUrl; ?> (car le helper donne des urls absolus, sans le nom de domaine) en utilisant la balise <base> html, tu vas kiffer.

Bonjour Mr.MoOx,

Pourrais-tu être un peu plus précis sur le helper stp ? Cela m'intéresse également smile

Merci.

Hors ligne

 

#4 31-03-2008 09:57:18

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

Mr.MoOx a écrit:

Salutation.
Pas de technique de sioux, mais un view helper: url() (cf. doc du zf smile )
Et sinon, tu peux te passer de ça <?php echo $this->baseUrl; ?> (car le helper donne des urls absolus, sans le nom de domaine) en utilisant la balise <base> html, tu vas kiffer.

De même pour moi , j'ai pas trop compris ce que j'ai quoté, tu n'aurais pas un exemple tout simple d'utilisation de ce que tu me parle? J'ai fouillé la doc et franchement je rame big_smile

Hors ligne

 

#5 31-03-2008 15:18:21

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

up?

Hors ligne

 

#6 16-04-2008 15:16:25

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

Bonjour,

Je reviens la dessus, j'ai un peu de temps à moi...

Merci pour le this url, c'est super pratique pour générer des url !
Pour info (pour ceux qui tomberont ici), ça donne maintenant :

Code:

<a href="<?php echo $this->url(array('action'=>'modifier','id'=>$album->id));?>">Modifier</a>
<a href="<?php echo $this->url(array('action'=>'supprimer','id'=>$album->id));?>">Supprimer</a>

Par contre Mr.MoOx, je n'ai pas compris ce que tu voulais dire en aprlant de balise <base>.

Sinon ma question à la base n'était pas de savoir comment générer l'url mais si il y avait un autre moyen pour afficher les bouton "supprimer" | "modifier" que de faire les test sur les acl directement dans la vue comme je l'ai fait :

Code:

if($acl->isAllowed($this->user->role, 'index', 'ajouter'))
{
    //J'afffiche les boutons
}

Merci

Dernière modification par sebondus (16-04-2008 15:16:38)

Hors ligne

 

#7 16-04-2008 16:09:13

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

je répond a la 1ere question (la deuxième je ne peut répondre big_smile )

la balise base est une balise que tu met entre les <head></head> qui permet de définir le root de ton application.

Par ex si je fait

Code:

<base url='/appli/v2/' />

alors tout les liens absolus prendront pour base la valeur de cette balise, donc :

Code:

<a href='/admin/index.php'>Administration</a>

emmenera vers :

/appli/v2/admin/index.php

et non vers /admin/index.php big_smile


Cette page est très bien faite là dessus

Hors ligne

 

#8 16-04-2008 17:37:14

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

Merci pour ton lien wink

Personne pour répondre à mon autre question?

Hors ligne

 

#9 16-04-2008 22:46:42

Paulop
Membre
Date d'inscription: 20-03-2008
Messages: 15

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

Personnellement j'ai fait un helper auquel j'envoie le role (en session), la ressource (le controlleur) et le privilege (l'action)

Je sais pas si c'est la meilleure méthode (en effet je vérifie s'il à l'accès à la page pointé par le lien, donc si ya plusieurs liens...), mais ça marche :


Code:

<?php


class Zend_View_Helper_AccesUser
{    

    ////
    // Verifie que l'utilisateur a l'accès sur une page en particulier afin de masquer ou afficher des liens
    ////
    
    public function accesUser($role,$controller,$action) 
    {
        // On récupère les paramètre d'ACL du registre
        $acl = Zend_Registry::get('acl');
        
        // On vérifie qu'il a les droits sur la page suivante.
        if($acl->isAllowed( $role, $controller, $action ))
            return 1;
        else
            return 0;    
        
    }
}

?>

Dernière modification par Paulop (16-04-2008 22:48:57)

Hors ligne

 

#10 17-04-2008 10:21:32

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

Mouais ça va pas changer grand chose car au lieu de mettre
($acl->isAllowed($this->user->role, 'index', 'ajouter')) avant mon lien
Je vais mettre if (accesUser($this->user->role, 'index', 'ajouter'))
donc je vais pas gagner grand chose la big_smile.

Hors ligne

 

#11 17-04-2008 10:36:13

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

sebondus a écrit:

Bonjour,

Je reviens la dessus, j'ai un peu de temps à moi...

Merci pour le this url, c'est super pratique pour générer des url !
Pour info (pour ceux qui tomberont ici), ça donne maintenant :

Code:

<a href="<?php echo $this->url(array('action'=>'modifier','id'=>$album->id));?>">Modifier</a>
<a href="<?php echo $this->url(array('action'=>'supprimer','id'=>$album->id));?>">Supprimer</a>

Par contre Mr.MoOx, je n'ai pas compris ce que tu voulais dire en aprlant de balise <base>.

Sinon ma question à la base n'était pas de savoir comment générer l'url mais si il y avait un autre moyen pour afficher les bouton "supprimer" | "modifier" que de faire les test sur les acl directement dans la vue comme je l'ai fait :

Code:

if($acl->isAllowed($this->user->role, 'index', 'ajouter'))
{
    //J'afffiche les boutons
}

Merci

Oui il suffit de le faire faire au contrôleur

Code:

if($acl->isAllowed($this->user->role, 'index', 'ajouter'))
{
    $this->view->addAction = '....';
}

et dans sa vue faire un

Code:

<?php if ($this->addAction) {?><a href="<?php echo $this->addAction;?>">Ajouter</a><?}?>

C'est toujours le contrôleur qui dit Quoi afficher et la vue seulement Comment

dans mon équipe nous utilisons un moteur de template qui ne permet pas l'accès au fonctions du framework il n'a accès qu'à la l'objet view ($this)
ça parait contraignant mais c'est beaucoup plus propre.

utiliser phtml est pour moins bien car pas besoin de moteur de template mais au passage on est tenté d'y placer du code ce n'est pas le lieu.

la vue affiche ce qu'on lui dit d'afficher elle peut utiliser des fonction de formatage de présentation tester des valeurs mais elle ne dois pas prendre de décisions
c'est le contrôleur qui contrôle la vue il est là pour ça.

je pose toujours pour principe que s'il y a une décision à prendre c'est au contrôleur de la prendre à lui de se débrouiller pour trouver le moyen d'y parvenir à lui d'indiquer à la vue ce qu'elle doit faire.

A+JYT

Hors ligne

 

#12 18-04-2008 17:25:29

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

Merci pour ta solution plutot pas mal.

J'en ai une autre via les helpers :

Code:

<?php
class Zend_View_Helper_Link
{
    function Link($request,$name)
    {
        $auth     = Zend_Auth::getInstance();
        $acl     = Zend_Registry::get('ACL');
        $url_helper = new Zend_View_Helper_Url();
        if ($auth->hasIdentity() && $acl->isAllowed($auth->getIdentity()->role, $request['controller'], $request['action']))
        {
            return '<span class="links"><a href="'.$url_helper->url($request).'" >'.$name.'</a></span>';
        }
    }
}

Et j'appelle mon helper directement depuis ma vue comme si je faisais un $this->url() avec les mêmes parametres, du coup je peux tester les droits avec le controlleur et l'action envoyés en parametres !

Code:

<?php    
}
echo $this->Link(array('action'=>'modifiertous', 'controller'=>'smilies'), "Modifier les smilies");
?>

Des critiques ? J'avance doucement sur le framework doncje fais pas forcement tout de la bonne façon.

PS: Manque les attributs de la balise <a> mais je voulais pas rentrer dans ces détails futiles pour la compréhension ... à vous de rajouter les parametres si vous trouvez ma solution formidable big_smile

Dernière modification par sebondus (18-04-2008 17:29:53)

Hors ligne

 

#13 03-06-2008 15:21:21

fte
Membre
Lieu: 06 13 83
Date d'inscription: 16-05-2008
Messages: 112
Site web

Re: [Zend_Acl][1.5] Affichage des boutons menant aux differentes actions..

Bonjour, merci pour ce fil instructif et clair mais je me permets de remonter le sujet car mon Link Helper est actuellement :

Code:

   function Link($request,$name) 
    {
    $auth     = Zend_Auth::getInstance();    // notre visiteur
    $acl     = Zend_Registry::get('acl');    // les regles ACL
    $roles = new Roles();                    // correspondance id_role -> nom du role

    if ($auth->hasIdentity()) {
            $role = $roles->getRoleByID( $auth->getIdentity()->id_role );
        } else {
            $role = 'guest';
        }
        
    $url_helper = new Zend_View_Helper_Url();
        if ( $acl->isAllowed($role, $request['controller'], $request['action']) )
        {
            return '<span class="lien"><a href="' . $url_helper->url($request) . '" >' . $name . '</a></span>';
        }       
       }

Il est indentique mais j'ai du rajouter une lecture du modèle des Roles pour obtenir la correspondance id_role -> nom du role afin d'utiliser isAllowed(role, control, action).

N'est ce pas un peu lourd de relire cette table sql a chaque lien ?
Dois-je plutot utiliser la registry ?
ou peut on initialiser le nom du role avec l'id de role lorsque l'on créé l'objet de Zend_Auth ? (ma préférée)
est ce qu'une piste est d'utiliser la dépendance de tables ?
dois-je bidouiller mon modèle Roles ?

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