Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-01-2009 21:46:46

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

[ACL] Gestion par module, rôles, ressources etc

Bonjour à tous,

J'ai déjà lu les quelques tutos sur les ACL ainsi que le chapitre du très célèbre livre "Zend Framework, bien développer en PHP" :p.

J'ai donc compris les principes de bases de gestion d'accès.

Cependant, j'ai besoin de votre avis pour la création d'un système complexe de gestion d'accès.

Je suis en train de développer une application modulaire. Plusieurs "types" d'utilisateurs auront accès à l'application.
- Les visiteurs --> Membre non logué avec un accès en lecture seule à quelques parties du sites.
- Les membres --> Ils ont un accès en écrire sur différentes parties (forum, articles etc).

Le membre peut insérer des nouveaux éléments (posts dans le forum, commentaires de news etc) et modifiés les éléments dont il est l'auteur.
De plus, il y a quelques roles plus importants : un membre peut être newser (possibilité de publier des news) ou modérateur (possibilité d'éditer tous les messages du forum) Administrateur (possiblité de donner des roles (newser ou moderateur par exemple) aux membres) etc
Les membres peuvent cumuler plusieurs rôles (etre newser et modérateur à la fois).

L'application est internationnale et donc ces rôles sont séparés selon la langue. Un newser francais ne pourra pas poster sur la partie anglaise du site.

Il y a donc un vrai système de gestion de droits et tout doit etre paramétrable par l'application.
En gros, un module est composé de ressources. Il est ensuite possible de regrouper ces ressources pour créer des roles et de donner ces roles à des membres.


Je fais donc appele à ceux qui ont un peu plus d'experience et de recule que moi pour me donner une piste. (il est très facile de s'aventurer dans la mise en place d'un systeme pour se rendre compte à la fin que l'on a pas fait le bon choix).

Comment feriez vous ?

Merci d'avance.

Dernière modification par slaughter (14-01-2009 21:49:00)

Hors ligne

 

#2 14-01-2009 23:57:47

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

Re: [ACL] Gestion par module, rôles, ressources etc

je cherche également d'améliorer ma gestion d'ACL dynamique (surtout de l'héritage), donc ce sujet m'interesse également, si je peut t'aider avec c'est 2 liens (surtout le deuxième) :

http://my.opera.com/zomg/blog/2007/05/0 … es-in-a-db
http://oss.jasoneisen.com/2008/04/26/da … framework/

Hors ligne

 

#3 15-01-2009 09:54:04

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [ACL] Gestion par module, rôles, ressources etc

N'oubliez pas qu'il y a une forme d'héritage des ressources, regardez bien la doc de Zend, c'est expliquer.
Ainsi, par exemple, la ressource 'news' est père d'autres ressources, aussi père de d'autres.
Donc, si tu deny a 'news', tout ce qui est en dessous sera deny aussi.

ex :
$acl->add(new Zend_Acl_Resource('fr'), 'news');
$acl->add(new Zend_Acl_Resource('en'), 'news');
// news possède 2 fils : fr et en

Les id uniques peuvent aussi utilisé pour affiné au maximum les droits (par exemple les id des news)

Concernant les roles, j'utilise un numéro de groupes.
Chaque utilisateur peut être affecté à un groupe. De plus chaque utilisateur possède un groupe qui leur est uniquement lié à eux (une sorte de groupe invisible). Sans oublié que la aussi, l'héritage est possible :
ex :
$acl->addRole(new Zend_Acl_Role('modérateur'), array("invité", "newser"));
$acl->addRole(new Zend_Acl_Role('Admin'), array("modérateur"));
// modérateur hérite de "invité" et "newser"
// Admin hérite de modérateur


EDIt :
Fait un tableau comme dans la doc de Zend !

Dernière modification par nORKy (15-01-2009 09:57:25)


----
Gruiiik !

Hors ligne

 

#4 15-01-2009 19:59:35

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [ACL] Gestion par module, rôles, ressources etc

Pour etre un peu plus précis, on va dire que mon site parle de sport et voici des urls de bases possibles :
- http://monsite.com/fr/rugby/news....
- http://monsite.com/en/rugby/news...
- http://monsite.com/fr/basket/article...
- http://monsite.com/en/basket/forum...
Je fais en sorte que je puisse facilement rajouter un sport à la liste et une langue également. Ensuite, "news", "article", "forum" etc sont des modules.

Le plus compliqué à comprendre pour moi est de trouver le moyen de donner les possiblités d'un newser sur la partie rugby en francais à un utilisateur et que ce meme utilisateur n'est que des droits de membre sur le reste du site.
Il n'y a plus de notion de hierarchier pour les couples langue/sport.

Comment faire ?

De plus, si on pousse un peu, il y aura un adminsitrateur par couple langue/sport et celui-ci doit pouvoir gérer les droits de ces membres indépendament des autres parties du site. C'est à dire qu'il y aura des rôles créer par cet administrateur et d'autres roles créer par les autres admins des autres couple langue/sport du site.

En gros, chaque module comporte des ressources, l'admin regroupe ensuite ces ressources par groupe (ce qui correspond à des roles je penses), ensuite, il peut regrouper des roles pour avoir des roles plus globaux et ensuite cet admin donne un role global à un groupe. Il entre ensuite les membres ciblés dans les groupe.

Il y aura juste le groupe "membre" qui sera créer à l'initialisation du site et qui correspond au groupe par défaut des utilisateurs inscrits.


Après ces questions presque fonctionnelles, il me vient les questions techniques.
Il y aura un grand nombre de possiblité de droit donné à un membre en particulier. Le membre doit donc toujours avoir accès à ses ACL lors de sa navigation. Où stocker ces ACL ? En session (risqué, l'utilisateur peut changer ses variables en session ? ailleurs ? Comment faites vous ?

Dernière modification par slaughter (15-01-2009 20:14:54)

Hors ligne

 

#5 16-01-2009 09:52:15

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [ACL] Gestion par module, rôles, ressources etc

Bon, j'essai de réexpliquer avec un EXEMPLE
un arbre de ressources :

Code:

      global
      /  |   \
    fr  en
   /
 ruby
/
...

Chaque ressource hérite de l'autre.
C'est écrit dans la doc : "Par exemple, si une règle par défaut doit être appliquée à tous les bâtiments d'une ville, on pourra simplement assigner la règle à la ville elle-même, au lieu de la répéter à tous les bâtiments"
Donc, tu places les droits de membres sur ton site en entier ('global' , disons qu'on déclare l'action 'lire')
Ainsi, quand tu test le droits 'lire' sur 'rudby', ca fonctionne grace à l'heritage sur global. Pas besoin de redéclarer la ressource 'lire' sur rudby.

Tu veux créer un autre role que 'membre', par exemple 'newser', tu devrais répéter tous les droits en plus de ceux qui leur sont spécifique. (replacer le droit de 'lire de newser sur global, alors que membre possède déjà ce droit)

Pour empecher cela, il faut aussi faire un arbre sur les roles :
Tu as un role 'newser' qui hérite du role 'membre'.

Tu donnes le droit de 'lire' de membres sur global.
Tu donnes lee droit de 'ecrire' de  newser sur 'rugby'.

Ainsi, quand tu donnes les droits de newser sur rudby, tu n'as pas besoin de dire qu'il a le droit de 'lire'.

Ca permet de bien 'constater' les droits spécifique de chacun.

De plus, on peut compliquer les choses en utilisant des exceptions (en utilisant à la fois allow et deny sur plusieurs endroits de l'arbre).

Tu sais très bien ce que tu veux, prends le temps de faire un schéma.


Concernant le stockage, mois, j'utilise un BDD, et j'ai un plugin qui charge tous les roles et ressources d'après ma bdd (un cache peut êtr utile)

bon courage


----
Gruiiik !

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