2010-06-17 19 views
0

Je souhaite créer un vérificateur de prédicat personnalisé Repoze capable d'accéder aux paramètres d'URL et de valider quelque chose. Mais je voudrais utiliser allow_only pour définir ce vérificateur d'autorisation dans toute la portée du contrôleur. Quelque chose comme:Comment transférer des paramètres d'URL pour repoher des vérificateurs de prédicats personnalisés

class MyController(BaseController): 

    allow_only = All(not_anonymous(msg=l_(u'You must be logged on')), 
        my_custom_predicate(msg=l_(u'something wrong'))) 

    def index(self, **kw): 
     return dict() 

alors, my_custom_predicate doit vérifier les paramters url pour chaque demande dans toutes les méthodes de MyController, et faire tout ce qu'il faut faire. Le problème est que: comment permettre à my_custom_predicate de vérifier les paramètres de l'URL, en l'utilisant comme je l'ai écrit plus haut.

Répondre

0

Peut être que vous devez utiliser ControllerProtector

from repoze.what.plugins.pylonshq import ControllerProtector 

allow_only = All(not_anonymous(msg=l_(u'You must be logged on')), 
        my_custom_predicate(msg=l_(u'something wrong'))) 

@ControllerProtector(allow_only) 
class MyController(BaseController): 

    def index(self, **kw): 
     return dict() 

Voir docs à http://code.gustavonarea.net/repoze.what-pylons/API.html

+0

Ok, ce qui est très similaire à utiliser allow_only dans le champ d'application du contrôleur. Mais comment my_custom_predicate connaitra-t-il les valeurs ** kw passées à l'index? – bluefoot

+0

Utilisez un objet de requête global. kw = request.environ ['pylons.routes_dict'] – estin