2009-05-20 8 views
0

Aidez-moi à mettre en place des listes de contrôle d'accès pour mon application web PHP. J'utilise Zend_ACL spécifiquement.Que devraient être les ressources dans une liste de contrôle d'accès? Des modèles d'objets ou les instances des objets?

Je veux un contrôle précis de l'application sur quelle entité spécifique (que ce soit un utilisateur ou un groupe) a accès à quelle ressource. Je voudrais pouvoir accorder l'accès à une instance de ressource particulière, mais aussi à toutes les ressources de ce type. Par exemple:

  • utilisateur # 1 dispose de droits d'édition sur tous les messages
  • utilisateur # 2 est un éditeur invité et a modifier des privilèges sur le post ID # 5
  • Group # 1 (invité) a lu des privilèges sur tout
  • Les utilisateurs appartiennent à un groupe d'utilisateurs qui hérite de l'invité.

Ma question est la suivante: est-ce qu'un ACL doit référencer des types de ressources ou des instances spécifiques? Dois-je accorder aux utilisateurs la base, à l'échelle de type ressource priviledges à l'aide de l'ACL comme ceci:

  • modifier des subventions à l'utilisateur # 1 sur le post
  • subvention utilisateur # 2 rien de plus que c'est l'héritage
  • groupe subvention # 1 lu sur toutes les ressources
  • mettre en œuvre une table d'exceptions pour suivre les subventions et denys des ressources spécifiques

Ou devrais-je créer des ressources pour tous les cas individuels de mes différents types de ressources un d aller sur un découragement autorisant tous les utilisateurs à lire toutes les ressources? Semble plutôt brutal.

Ma solution actuelle est la suivante: en utilisant l'héritage des ressources, créez une ressource parent de type no, un enfant de cette racine pour chaque type, puis un enfant de chaque type pour chaque instance. Cela me permet d'accorder sur un type particulier et de refuser sur quelques instances, ou de refuser un type particulier mais accorder sur une instance (comme pour l'utilisateur n ° 2 ci-dessus). Ceci unifie bien mon système d'autorisations, mais mes besoins sont plus complexes. Bientôt, les types de ressources seront imbriqués. Donc, je vais différents modules qui peuvent être des parents ou des enfants. Un exemple: un module de galerie de photos sur le site, un module d'annonces avec une autre galerie plus exclusive qui se trouve en dessous. Je ne suis pas sûr de savoir quoi faire pour y remédier. Je voudrais toujours avoir la possibilité d'accorder dans toutes les galeries, ou juste une, ou juste quelques photos en dessous. Gardez à l'esprit que Zend_ACL ne prend pas en charge l'héritage multiple pour les ressources.

Quelle est la meilleure façon de mettre en œuvre cela? Tous avec un ACL ou en utilisant une logique intégrée dans chaque module?

Répondre

1

Je viens de répondre à SO995925: How should I structure my tree of resources in an ACL? et les conseils que j'ai à vous est tout à fait la même chose.

Tout est dans votre tête - Les "Galeries d'Announcement" sont une ressource enfant des "Galeries de Photos". Générique Galerie # 1 parents à "Galerie de photos" tandis que "Announcement Gallery" parents à "Announcement Galleries".Vous pouvez toujours ajouter une autre étape de ressource parent dans votre chaîne si vous devez diviser à nouveau l'arborescence.

Encore une simple chaîne d'héritage d'arbre.

+0

Votre réponse à l'autre question était exactement ce dont j'avais besoin. Merci! – hornairs

0

Votre plan de solution est la façon dont la plupart des systèmes fonctionnent, je pensais. Le système de fichiers Windows fonctionne de cette façon. Le tout premier système ACL que j'ai utilisé dans DCE a fonctionné de cette façon.

L'héritage est ce que vous devez comprendre. Est-ce que vous héritez dynamiquement ou au moment de la création de la ressource?

+0

L'héritage est dynamique, mais mes ressources ne peuvent avoir qu'un seul parent. Cela signifie qu'ils peuvent hériter de leur type de ressource parent (une instance héritant d'une ressource modèle) ou hériter de leur parent dans la structure des ressources (dans l'exemple ci-dessus, la galerie hérite de la page des annonces). Je veux la fonctionnalité des deux, mais je ne peux pas hériter de plus d'une chose. – hornairs

Questions connexes