2013-01-23 3 views
1

problème


Salut, je suis nouveau dans le Zend Framework 1 (je sais qu'il ya une version 2, mais nous devons travailler avec la version 1 pour ce projet) donc je ne sais pas si c'est une question stupide ou pas. En plus de cela, j'ai trouvé assez difficile de trouver une bonne documentation sur l'enregistrement et la connexion. J'ai réussi à avoir un système avec ACL et Auth qui fonctionne bien.Zend Framework 1 ACL: permettre à tous et refuser une

Je me pose des questions sur mon ACL si je fais les choses correctement. C'est ce que ma classe ressemble maintenant:

classe bckstg_Acl étend Zend_Acl { fonction publique __construct() {

$this->addRole(new Zend_Acl_Role('guest')); 
    $this->addRole(new Zend_Acl_Role('user'), 'guest'); 
    $this->addRole(new Zend_Acl_Role('admin'), 'user'); 

    $this->add(new Zend_Acl_Resource('error::error')); 
    $this->add(new Zend_Acl_Resource('auth::login')); 
    $this->add(new Zend_Acl_Resource('auth::register')); 
    $this->add(new Zend_Acl_Resource('auth::logout')); 
    $this->add(new Zend_Acl_Resource('data::render')); 
    $this->add(new Zend_Acl_Resource('index::index')); 
    $this->add(new Zend_Acl_Resource('admin::index')); 
    $this->add(new Zend_Acl_Resource('auth::noauth')); 

    //$this->allow('guest', 'error', 'error'); 
    $this->allow('guest', 'auth::noauth'); 
    $this->allow('guest', 'auth::login'); 
    $this->allow('guest', 'data::render'); 
    $this->allow('guest', 'index::index'); 
    $this->allow('guest', 'auth::register'); 
    $this->allow('user', 'auth::logout'); 
    $this->allow('admin', 'admin::index'); 
} } 


Question


J'ai remarqué que si je n'ajoute pas de nouveau contrôleur aux ressources, aucun des 3 types d'utilisateurs (invités, utilisateur ou admin) ne peut voir la page. Mais je me demandais s'il y avait un moyen de dire que tous les utilisateurs peuvent tout voir en général? Parce que, fondamentalement, je n'ai qu'à refuser aux invités le système "j'aime" de mon application et aux utilisateurs et invités le panneau d'administration, en plus de cela ils peuvent voir toutes les pages.

Répondre

2

Vous pouvez initialiser votre ACL si vous détectez contrôleur particulier (s) ou module (s)

Ma façon pour cela est de demander au plugin de contrôleur frontal si je dois installer ACL, donc:

// Register ACL plugin if is admin module 
if($request->getModuleName() == 'admin'){ 
    $auth = Zend_Auth::getInstance(); 
    $acl  = new My_Acl_Acl(); 
    $front = Zend_Controller_Front::getInstance(); 
    $front->registerPlugin(new My_Plugin_AclControl($auth, $acl)); 
} 

Pour le site Web de repos (module par défaut) La liste de contrôle d'accès n'est jamais sollicitée, seulement pour le module d'administration.

Vous avez beaucoup de littérature sur Internet, mais ce blog m'a beaucoup aidé au début http://www.amazium.com/blog/label/zend_acl/page/1

+0

Merci, je vais essayer celui-ci par la suite. Je ne savais pas que vous pourriez le faire de cette façon! Merci aussi pour la littérature, vu déjà des choses intéressantes sur le sujet! –

+0

Cela fonctionne génial btw! Si quelqu'un avait besoin de ceci: j'ai utilisé getControllerName pour pointer vers le contrôleur. Merci encore! –

+0

Je vous conseille d'activer auto-complète pour ZF, IDE comme NetBeans ont cette option. http://stackoverflow.com/q/7487737/949273 – tasmaniski

Questions connexes