Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
<?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 , 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
Salutation.
Pas de technique de sioux, mais un view helper: url() (cf. doc du zf )
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
Hors ligne
Mr.MoOx a écrit:
Salutation.
Pas de technique de sioux, mais un view helper: url() (cf. doc du zf )
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
Merci.
Hors ligne
Mr.MoOx a écrit:
Salutation.
Pas de technique de sioux, mais un view helper: url() (cf. doc du zf )
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
Hors ligne
up?
Hors ligne
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 :
<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 :
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
je répond a la 1ere question (la deuxième je ne peut répondre )
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
<base url='/appli/v2/' />
alors tout les liens absolus prendront pour base la valeur de cette balise, donc :
<a href='/admin/index.php'>Administration</a>
emmenera vers :
/appli/v2/admin/index.php
et non vers /admin/index.php
Cette page est très bien faite là dessus
Hors ligne
Merci pour ton lien
Personne pour répondre à mon autre question?
Hors ligne
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 :
<?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
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 .
Hors ligne
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
if($acl->isAllowed($this->user->role, 'index', 'ajouter')) { $this->view->addAction = '....'; }
et dans sa vue faire un
<?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
Merci pour ta solution plutot pas mal.
J'en ai une autre via les helpers :
<?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 !
<?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
Dernière modification par sebondus (18-04-2008 17:29:53)
Hors ligne
Bonjour, merci pour ce fil instructif et clair mais je me permets de remonter le sujet car mon Link Helper est actuellement :
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
Pages: 1