2011-12-22 3 views
1

Il y a beaucoup de messages liés à ce que je demande, mais après de longues recherches, je n'ai pas trouvé ce que je cherchais, je m'en excuse existe quelque part. Mon objectif - TOUTES les demandes envoyées à mon application Zend doivent passer par un plugin preDispatch, puis passer à un contrôleur d'authentification personnalisé qui décidera si les informations d'authentification existantes sont suffisantes pour l'opération demandée. 'Suffisant' dépend de la logique de l'application, donc pourquoi je veux le faire au niveau du contrôleur + modèle. S'ils suffisent, ils envoient la requête d'origine à l'action controller + spécifiée, sinon ils font défaut à une action 'get lost'. Actuellement, j'utilise un plugin auth auth défini dans preDispatch pour vérifier simplement les informations d'identification POST'ed (si nous nous connectons), dans tous les cas le plugin stocke la requête d'origine et redirige tout le monde (auth « d ou non) à mon contrôleur auth, a-la:Les requêtes de redirection forment un contrôleur fourre-tout dans Zend Application sans bouclage pour toujours

$request->setModuleName('default') 
      ->setControllerName('auth') 
      ->setActionName('check') 
      ->setParam('oreq',$request->getParams()); 

mon problème/question est que dans mon Auth-> vérifier l'action, comment dois-je effectuer la redirection après une décision est prise? Si j'utilise:

$this->_helper->redirector($or['action'], $oreq['controller']); 

je reçois évidemment une boucle infinie que ces demandes passent par le plug-in preDispatch à nouveau. Bien sûr, je pourrais passer quelque chose avec la redirection afin que le plugin Auth ignore ces demandes, mais il s'agit clairement d'un trou de sécurité. J'avais pensé à peut-être générer et stocker un hachage md5, le stocker à la session et le passer comme un paramètre d'échappement, mais cela semble un peu sommaire.

Des idées plus intéressantes? Peut-être une méthode de redirection qui ne passe pas par la routine de prédispatch standard dans Zend App? Merci d'avance!

Répondre

0

Ce n'est généralement pas le cas dans Zend Framework. Toutes les demandes ne vont pas à un emplacement commun et sont redirigées vers l'authentification d'origine demandée.

Pour le contrôle d'accès, utilisez Zend_Acl. Grâce à cela, vous pouvez facilement déterminer si l'utilisateur actuel a l'autorisation nécessaire pour accéder au contenu, sinon rediriger vers l'action «se perdre».

Si vous êtes toujours intransigeant sur l'utilisation de votre technique, utilisez la méthode _forward au lieu de la méthode de redirection.

Puisque _forward est une redirection interne, vous pouvez passer des arguments supplémentaires et vérifier cela dans preDispath pour éviter une boucle.

$this->_forward($action, $controller, $module, $params) 
+1

Vous êtes une star, merci beaucoup. – Dan

+1

fyi, _forward circule – Dan

Questions connexes