Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-03-2007 18:28:25

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Organisation Zend_Acl et lazy loading

Bonjour,

Je suis en train de mettre en place Zend_Acl pour un site communautaire assez complexe. J'ai des soucis d'organisation.

Je définis les droits au niveaux de certains profils dans certains groupes :
* dans le groupe 12, le profil "admin" a le droit de tout faire, le profil "user" a le droit de lire...
* ensuite si l'utilisateur courant a le profil "user" dans le groupe 12, je le fais hériter de user qui lui même hérite de groupe 12

Dans la pratique, j'ai les rôles suivants :
$acl->addRole(new Zend_Acl_Role("groupe12"));
$acl->addRole(new Zend_Acl_Role("groupe12_user"));
$acl->addRole(new Zend_Acl_Role("currentUser","groupe12_user"));

Ensuite pour interroger le moteur d'ACL, je fais par exemple : $acl->isAllowed("currentUser","groupe12","forum/addMessage");

Et là j'ai des problèmes existentiels :
* mon rôle "groupe12_user", je suis obligé de lui donner un préfixe avec le nom du groupe pour qu'il soit unique
* si l'internaute visite un autre groupe et que je veux charger ses droits liés au nouveau groupe à la volée, je ne peux pas ajouter un nouveau parent au rôle "currentUser" (aucune fonction dispo dans Zend_Acl).

Est-ce que vous pensez que cette organisation est pertinente ?

Est-ce que quelqu'un a mis en place une organisation qui tient la route ?

Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#2 27-03-2007 23:12:10

quode
Membre
Date d'inscription: 22-03-2007
Messages: 20

Re: Organisation Zend_Acl et lazy loading

* mon rôle "groupe12_user", je suis obligé de lui donner un préfixe avec le nom du groupe pour qu'il soit unique

Je ne pense pas que cela soit un problème, mais il est clair qu'il faut être rigoureux. Il serait intéressant que Zend_Acl fournisse une solution pour prendre en compte des namespaces (comme pour Zend_Session).

* si l'internaute visite un autre groupe et que je veux charger ses droits liés au nouveau groupe à la volée, je ne peux pas ajouter un nouveau parent au rôle "currentUser" (aucune fonction dispo dans Zend_Acl).

Spontanément, j'aurais tendance à dire que le rôle "currentUser" doit être manipulé de manière dynamique, c'est à dire ajouté et enlevé au grès des visites avec Zend_Acl::hasRole(), Zend_Acl::removeRole() et Zend_Acl::addRole().


All software problems can be solved by introducing an extra level of indirection. Well, almost.

Hors ligne

 

#3 28-03-2007 08:56:58

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Organisation Zend_Acl et lazy loading

Spontanément, j'aurais tendance à dire que le rôle "currentUser" doit être manipulé de manière dynamique, c'est à dire ajouté et enlevé au grès des visites avec Zend_Acl::hasRole(), Zend_Acl::removeRole() et Zend_Acl::addRole().

J'en suis arrivé à la création d'une fonction addParentRole qui fait le removeRole qui va bien et le addRole associé.

Je te remercie pour ta réponse. Au moins tu ne trouves pas mon approche complètement abérante :-) . Je suis assez confiant sur le fait d'arriver à un truc qui marchote, mais j'ai peur de prendre le problème à l'envers...

Je vais continuer dans cette voie. Si tu penses à une organisation meilleure, n'hésite pas à poster un nouveau message :-)
A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#4 28-03-2007 13:11:34

okworld
Nouveau membre
Date d'inscription: 28-03-2007
Messages: 6

Re: Organisation Zend_Acl et lazy loading

AMHA, je dirais que tu devrais supprimer cette notion de groupe ds les ACL (du moins jusqu'a l'apparition des namespaces) et te contenter des roles des users (root, admin, user, guest) , ensuite pour voir si le user a le droit de visiter ce group tu crees un assert, bref voila a quoi sa ressemble :

Code:

$acl->add(new Zend_Acl_Resource('forum'));

$acl->addRole(new Zend_Acl_Role('guest'))
         addRole(new Zend_Acl_Role('user'))
         addRole(new Zend_Acl_Role('admin'), 'user')
         addRole(new Zend_Acl_Role('root'), 'admin');

$acl->deny('guest');

$acl->allow('user', 'forum', 'readMessage', new leGroupeEstBon())
         allow('admin', 'forum')
         allow('root');

je n'ai pas teste le code mais normalement ca devrait fonctionner

Hors ligne

 

#5 28-03-2007 13:24:43

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Organisation Zend_Acl et lazy loading

En fait ça ne marche pas dans mon cas, parce que le même gars a un profil différent dans chaque groupe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 23-04-2007 10:21:01

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: Organisation Zend_Acl et lazy loading

J'ai sensiblement le même problème : mon application sera composée de plusieurs modules, avec quelques centaines d'utilisateurs chacun. Certains pourront avoir accès à plusieurs modules, sachant qu'il y aura 3 privilèges possibles par module (a priori...) : admin (gestion des droits des autres users, notamment :S), lecteur et contributeur (écriture)
Je vous tiendrais au courant de ma solution, enfin quand je l'aurais trouvé tongue

Hors ligne

 

#7 23-04-2007 11:45:39

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Organisation Zend_Acl et lazy loading

J'ai fait une feature request pour l'ajout d'un rôle parent : ZF-1175. Elle a été acceptée a priori, mais je sais pas trop quand ça va sortir...
A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#8 08-06-2007 09:56:03

ahseed
Nouveau membre
Lieu: Toulouse
Date d'inscription: 08-06-2007
Messages: 1
Site web

Re: Organisation Zend_Acl et lazy loading

J'arrive un peu tard... mais vieux motard...

La solution pour gérer les ACL n'est-elle pas de coupler zen_acl et zen_auth, ce dernier créant un objet droits adapté à l'identifiant connecté ?

Je veux dire :

zen_auth (sous-classe héritée, évidemment) > vérifie l'identification et le profil d'accès puis crée un objet compatible avec ce qu'attend zen_acl puis zen_acl vérifie les droits en fonction !

Je vais tenter cela sur un projet en cours pour lequel les id doivent avoir les droits sur des dossiers de téléchargement (c'est une BDDI). Je vous en dis plus dès que.

A+

David

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