2010-07-19 8 views
4

Je cherche à concevoir un système ACL soutenu par la doctrine pour mon propre usage, même si je suis aux prises avec certaines des considérations de conception initiales.Création d'une ACL générique OO à l'aide de Doctrine

En ce moment, je regarde ce qui en fait basé sur des classes et des identifiants uniques, de les stocker dans une table en tant que tel:

Table: ACL 
    ResourceClass 
    ResourceKey 
    RoleClass 
    RoleKey 
    Permission 

Il est évident que cela va exiger que j'Introspect sur les classes qui sont interrogeables pour dériver les valeurs ResourceClass correctes.

Je me demande si cette approche a déjà été suivie ou si quelqu'un a des conseils pour le faire de manière plus efficace. D'autres choses comme les relations récursives entre les rôles me confondent aussi car je ne suis pas sûr de savoir comment faire une requête récursive pour construire et ACL pour une ressource.

Je ne suis pas un grand fan de Zend ACL, donc s'il vous plaît pas de suggestions pour cela - je suis au courant!

D'autres précisions seront apportées à cette question au fur et à mesure que les gens pèsent, alors s'il vous plaît, gardez-moi! Cette question elle-même peut nécessiter quelques itérations! ;)

Répondre

3

J'utilise NestedSet pour stocker la hiérarchie ACL et le cache pour accélérer les choses.

Doctrine ORM for PHP - NestedSet

Voici un message qui peut être utile aussi:

Zend_Acl part 3: creating and storing dynamic ACLs | CodeUtopia - The blog of Jani Hartikainen

(un coup d'oeil sur les deux parties précédentes, ainsi).

+0

Génial, je vais devoir examiner tous les différents comportements. Juste pour être clair, vous avez utilisé l'implémentation NestedSet pour vos rôles/groupes? De cette façon, vous pouvez obtenir la liste complète des rôles/groupes, puis interroger la table qui stocke toutes vos autorisations avec toutes ces clés? –

+0

Vous n'avez pas besoin de Doctrine pour cela. NestedSet est juste un modèle SQL pour stocker les structures de l'arbre dans la base de données. Vous pouvez l'implémenter comme vous le souhaitez. Stroring l'ACL comme NestedSet vous donne la capacité de trouver facilement les autorisations des enfants, des parents, des ascendants, etc. Cela convient très bien pour les grandes structures ACL. Pour les ACL simples, un tableau, Zend_Config (ou sérialiser l'ACL, si vous avez vraiment besoin de DB) est suffisant. – takeshin

+0

Je ne suis pas intéressé par l'utilisation de zend_ACL car c'est assez compliqué. J'espère avoir plus de détails sur la façon dont vous stockez l'ACL comme un arbre, pour moi ce n'est pas vraiment un arbre de données. Alors que les rôles sont. J'ai cependant besoin de les stocker dans une base de données. C'est pourquoi j'utilise la doctrine. –