Ограничение доступа к некоторым частям сайта. Веб-приложение Google App Engine - PullRequest
2 голосов
/ 31 июля 2009

Я помещаю идентификатор привилегий пользователя в сеансы пользователя после аутентификации. Как ограничить доступ к некоторым частям сайта в зависимости от привилегий пользователя. Сейчас я проверяю привилегии в обработчиках страниц, но как сделать это лучше?

Существуют ли какие-либо шаблоны для этого? Не могли бы вы привести пример?

Ответы [ 2 ]

5 голосов
/ 31 июля 2009

Вы можете определить декораторы, чтобы сделать это проще. Например:

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

А чтобы их использовать, просто украсьте методы обработчика:

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
1 голос
/ 31 июля 2009

Если вы хотите ограничить определенные области только администраторами вашего приложения, вы можете добавить следующее в app.yaml

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

в противном случае вы можете проверить, когда кто-то

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

РЕДАКТИРОВАТЬ: http://code.google.com/p/gdata-python-client/source/browse/#svn/trunk/samples/oauth/oauth_on_appengine есть примеры использования OAuth на appengine

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...