2010-01-08 3 views
0

Hé les gars, je commence avec Zend, et j'essaie de comprendre comment ça marche (y arriver), et avec les classes Acl, les gens semblent déclarer tous les rôles et ressources dans un seul fichier. Maintenant, pour moi, cela semble être un gaspillage de ressources système si la personne ne se connecte qu'en tant qu'utilisateur de base, ou même simplement en tant qu'invité/visiteur du site. Je pensais donc qu'il est possible d'avoir différentes classes qui définissent les rôles dépendant du rôle/ressource de l'utilisateur actuel. Mon idée actuelle est d'utiliser switch/case sur le rôle dans le bootstrap, et charger des classes Acl individuelles en fonction du nom du rôle (par exemple sake, 'visitor' => 'Model_VisitorAcl', 'users' => ' Model_UserAcl 'et' admin '=>' Model_AdminAcl '), chacun avec un fichier de classe correspondant. Ensuite, dans les fichiers de classe, faites quelque chose pour chacun. Cela fonctionne, et actuellement je pourrais définir tous mes acls 'admin' en un (retour en arrière à travers la hiérarchie des droits d'admin-user-visitor), puis en 'user' avoir des rôles et des ressources 'user' - 'visitor'.Système de classe modulaire Zend_Acl

Toutefois, cela ne semble pas la meilleure façon, comme si je voulais changer les autorisations de rôle pour « utilisateur » je dois changer pour l'utilisateur 'et « admin ». Ceci n'est pas un problème avec 2 rôles, mais sur les plus gros systèmes, c'est évidemment le cas.

J'ai donc essayé quelque chose comme

 
class Model_AdminAcl extends Zend_Acl{ 
    function __construct(){ 
    $d = new Model_UserAcl(); 

    //defining the admin role and permissions, with inheritance from the roles 
    //set in Model_UserAcl 
    } 
} 

Pour essayer d'obtenir la Model_UserAcl construire fonction à exécuter, semble mettre ainsi le rôle « utilisateur », mais cela ne veut pas travailler, lancer « Uncaught exception « Zend_Acl_Role_Registry_Exception » avec le message 'ID de rôle parent' les utilisateurs 'n'existe pas' " erreur.

Alors, quelle est la prochaine étape? Avoir des fichiers include individuels pour chaque module, et les classes requises les incluent-elles si nécessaire? Ou est-ce que je fais juste de la montagne avec des taupinières avec ce problème?

Merci, Psy

Répondre

0

Ok, résolu ce, ne sais pas pourquoi je ne pensais pas essayer ce en premier lieu (vendredi frazzle du cerveau, je pense)

je viens de mettre le contenu du constructeur dans sa propre fonction, puis appelé cette fonction dans le constructeur, et rendre les classes héritent de la classe ci-dessous.

 

//Model/VisitorAcl.php 
class Model_VisitorAcl extends Zend_Acl{ 
    function __construct(){ 
    $this->addVisitorRules(); 
    } 

    function addVisitorRules(){ 
    //adding the role and permissions 
    } 
} 

//Model/UserAcl.php 
class Model_UserAcl extends Model_VisitorAcl{ 
    function __construct(){ 
    $this->addVisitorRules(); 
    $this->addUserRules(); 
    } 

    function addUserRules(){ 
    //adding the role and permissions 
    } 
} 

//Model/AdminAcl.php 
class Model_AdminAcl extends Model_AdminAcl{ 
    function __construct(){ 
    $this->addVisitorRules(); 
    $this->addUserRules(); 
    $this->addAdminRules(); 
    } 

    function addAdminRules(){ 
    //adding the role and permissions 
    } 
} 

Si ce n'est pas la façon dont je devrais y aller, alors n'hésitez pas à me le faire savoir.

Psy

Questions connexes