Чтобы проконтролировать ответ Дрю, я использую аналогичную систему в своем приложении, поэтому в моем коде сервера есть что-то вроде следующего определения класса (упрощено здесь для ясности)
class myUser(db.Model):
user = db.UserProperty(required=True)
rights = db.StringProperty(required=True, choices=set(["public", "private"]))
created = db.DateTimeProperty(auto_now_add=True)
lastaccess = db.DateTimeProperty(auto_now=True)
, а затем у меня есть код, подобныйздесь я обрабатываю запросы
def checkUserRights(user):
q = db.GqlQuery("SELECT * from myUser WHERE user = :1", user)
u = q.get()
if not u:
# create a new 'public access' user if we haven't seen this person before
u = myUser(user=user, rights="public")
# always update the user record after the source is fetched (updates the lastaccess field)
db.put( u )
return u.rights
rights = checkUser(users.get_current_user())
if isPrivateArea and rights == "private":
....
Таким образом, я создаю пользователя для КАЖДОГО посетителя, а затем у меня есть интерфейс администратора для изменения прав выбранных пользователей - вы можете решить, например, не создаватьзапись для каждого посетителя
def checkUserRights(user):
q = db.GqlQuery("SELECT * from myUser WHERE user = :1", user)
u = q.get()
if not u:
# grant default public rights to anyone...
return "public"
# always update the user record after the source is fetched (updates the lastaccess field)
db.put( u )
return u.rights
Это, конечно, на странице, где app.yaml указывает "login: required"