【发布时间】:2010-09-07 20:32:08
【问题描述】:
我对这个 Google 应用引擎很陌生。我每天都在学习东西。 我有一个关于谷歌应用引擎的论坛。 但我想要的是拥有私人或受限制的部分。 对于某些 Google 帐户用户,应锁定某些功能,这些用户位于某种访问控制列表中。
我可以说简单的话,只有那些在访问列表中的用户才能看到论坛的其余部分将被重定向到“联系管理员”页面。
因为我是新手,所以我想知道这是否可能。 如果是,我该如何实现? 谢谢, 阿洛克
【问题讨论】:
我对这个 Google 应用引擎很陌生。我每天都在学习东西。 我有一个关于谷歌应用引擎的论坛。 但我想要的是拥有私人或受限制的部分。 对于某些 Google 帐户用户,应锁定某些功能,这些用户位于某种访问控制列表中。
我可以说简单的话,只有那些在访问列表中的用户才能看到论坛的其余部分将被重定向到“联系管理员”页面。
因为我是新手,所以我想知道这是否可能。 如果是,我该如何实现? 谢谢, 阿洛克
【问题讨论】:
如果您使用的是内置的用户 API,您可以检查 users.is_current_user_admin() 作为访问控制机制。管理员可以通过the dashboard进行管理。
如果您需要更精细、特定于应用程序的授权逻辑,通常您会在数据存储中创建一个 User 模型,该模型引用内置的 UserProperty 并保存角色列表或您需要检查授权的任何其他内容。
【讨论】:
为了跟进 Drew 的回复,我在我的应用程序中使用了类似的系统,因此我的服务器代码具有类似于以下类定义的内容(为清楚起见在此处进行了简化)
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”的页面上
【讨论】: