2010-02-03 24 views
1

Je travaille sur une application web où différents groupes d'utilisateurs ont un accès différent aux ressources . Jusqu'à présent, rien de spécial, je suppose, mais il y a une mise en garde; l'application est divisée en "domaines" de sorte que chacune de nos organisations clientes a son propre contenu. Ici, j'utilise un modèle plus simple pour illustrer mon problème.Comment représenter différents domaines d'application dans une ACL?

Chaque domaine a les mêmes types de ressources, mais chaque instance de ressource est connectée à un seul domaine. Voici ce qu'il ressemblerait à un domaine:

Resources: stories, announcements 

Roles: 
    guest // read only access 
    root // unlimited access 
    editor // like guest, but with r/w access to resource "stories" 
    admin // r/w access to both resources 

Je suis venu avec deux approches différentes pour mettre en œuvre cette aide de Zend_Acl, la première consiste à utiliser simplement différents ACLs pour différents domaines, la copie du ci-dessus pour chaque domaine. La seconde est d'utiliser une ACL et y ajouter de nouveaux rôles pour chaque domaine:

Domains: domain0, domain1, domain2 

Roles: 
    guest 
    root 
    editor-domain0 
    editor-domain1 
    editor-domain2 
    admin-domain0 
    admin-domain1 
    admin-domain2 

La deuxième approche a l'avantage qu'un utilisateur peut être administrateur d'un domaine tout étant rédacteur en chef d'un autre (qui pourrait arriver). Mais il a aussi l'inconvénient que les rôles ne sont pas statiques - nous devons générer chaque fois que nous ajoutons ou supprimons un domaine. Est-ce que l'une ou l'autre de ces approches est bonne ou existe-t-il de meilleures façons de traiter plusieurs domaines?

Répondre

0

Une autre solution pourrait être de sous-classer Zend_Acl, plus spécifiquement les méthodes 'allow' et 'deny'.

Par exemple,

allow($role, $action, $resource, $domain) { 
// parent::allow($role . '-' . $domain, $action, $resource); 
} 

Ce n'est pas aussi simple que cela, mais vous voyez l'idée. Je ne suis pas sûr de ce que vous voulez dire avec les instances de ressources, mais je vais le suggérer de toute façon: 'resource-domain', par exemple allow ('admin', 'action', 'story-domain0').

+0

J'ai utilisé une variante de cette réponse; mais au lieu de sous-classer Zend_Acl, j'ai créé des méthodes utilitaires avec la même signature dans une autre classe qui appelle les méthodes appropriées dans Zend_Acl. –