Je réalise un site qui va identifié 5 rôles.
1 - guest
2 - author
4 - editor
5 - admin
Chaque role est prédéfini dans une BDD pour une ressource particulière (un blog)
J'ai donc quelques choses du genre dans ma table :
1 2 3 4
|
id_user | id_blog | role
2 | 3 | editor
5 | 9 | author |
L'editeur est le créateur du blog, il peut ensuite accepter des utilisateurs qui aurait postulés en tant qu'auteur.
L'un comme l'autre a des droits qui lui sont propres en fonction de son rôle.
L'admin peut quand à lui tout controller.
Les auteurs comme les éditeurs peut avoir accès à plusieurs blog, avec des roles identiques ou différents mais propre au blog en question.
Pour l'invité (guest) pas de trop de problème a priori.
Ma question est donc la suivante, j'ai un peu de mal à trouver une solution satisfaisante à la structure de mon ACL
Je n'ai pas très envie de vérifier celle ci pour chaque action, alors j'ai étendu la classe Zend_Controller_Plugin_Abstract pour surcharger la méthode preDispatch() qui se charge donc de vérifier si :
- L'utilisateur est authentifié
- L'utilisateur a accès à la ressource (en l'occurrence l'action)
Mes roles je l'ai défini ainsi :
Controller_Action
Par exemple : Blog_Editer ou Utilisateur_Profile
Dans preDispatch je récupère ensuite ces informations pour construire le nom de ma ressource et la comparer avec celles existentes
$resource = ucfirst($request->getControllerName()) . '_' . ucfirst($request->getActionName());
A priori sa fonctionne bien pour la majorité des cas mais avec cette méthode il n'y aucune différence entre l'editeur d'un blog A et l'éditeur d'un blog B, je pensais utiliser les assertions fournis par Zend_Acl_Assert_Interface pour parvenir à ce résultat, mais je me demandais s'il s'agissait d'une méthode judicieuse, en effet je débute en programmation objet ainsi qu'avec ZF, mais j'ai tout de même le soucis de faire quelques choses de cohérents.
Merci donc d'avance de vos conseils
Partager