2009-07-31 4 views
2

Je mets l'identificateur de privilèges utilisateur dans les sessions utilisateur après l'authentification. Comment limiter l'accès à certaines parties du site en fonction des privilèges de l'utilisateur. Pour l'instant je vérifie les privilèges dans les gestionnaires de page mais comment le rendre meilleur?Restreindre l'accès à certaines parties d'un site. Application Web Google App Engine

Existe-t-il des modèles existants pour cela? Pouvez-vous donner un exemple?

Répondre

5

Vous pouvez définir des décorateurs pour faciliter cette tâche. Par exemple:

def requiresUser(fun): 
    def decorate(*args, **kwargs): 
    if not users.get_current_user(): 
     self.error(403) 
    else: 
     fun(*args, **kwargs) 
    return decorate 

def requiresAdmin(fun): 
    def decorate(*args, **kwargs): 
    if not users.is_current_user_admin(): 
     self.error(403) 
    else: 
     fun(*args, **kwargs) 
    return decorate 

Et pour les utiliser, il suffit de décorer les méthodes de gestionnaire:

class NewsHandler(webapp.RequestHandler): 
    # Only logged in users can read the news 
    @requiresUser 
    def get(self): 
    # Do something 

    # Only admins can post news 
    @requiresAdmin 
    def post(self): 
    # Do something 
+0

Merci c'est cool! –

1

Si vous souhaitez restreindre certaines zones à seulement admins de votre application, vous pouvez mettre ce qui suit dans app.yaml

- url: /url.* 
    script: path.py 
    login: admin 

sinon vous pouvez vérifier quand quelqu'un

class PathHandler(webapp.RequestHandler): 
    def get(self): 
    if users.get_current_user(): 
     pass #do something 
    else: 
     self.error(403) #Access denied 

def post(self): 
    if users.get_current_user(): 
     pass #do something 
    else: 
     self.error(403) #Access denied 

EDIT: http://code.google.com/p/gdata-python-client/source/browse/#svn/trunk/samples/oauth/oauth_on_appengine a exemples d'utilisation d'OAuth sur appengine

+0

Merci, mais ce qui est presque que j'utilise en ce moment :) –

+0

vous pouvez utiliser http: // Code .google.com/p/gdata-python-client/source/parcourir/# svn/trunk/samples/oauth/oauth_on_appengine comme modèle peut-être? – AutomatedTester

Questions connexes