【问题标题】:Appengine ACL with Google Authentication带有 Google 身份验证的 Appengine ACL
【发布时间】:2011-06-04 21:49:39
【问题描述】:
我想使用 Google 身份验证实现 ACL。需要一些关于相同可能性的指针。
用例:
只有 myadmin@gmail.com 可以访问页面 X
所有人都可以访问的页面 Y 属于 Y 组。注册后,版主会将用户添加/拒绝到 Y 组。
如果用户不属于上述两种中的任何一种,则无法访问页面。即使用户认证成功,也禁止未经授权的查看。
我打算在我的项目中使用 Django,任何 Django 提供的支持都会很有用。
提前致谢。
【问题讨论】:
标签:
python
django
google-app-engine
authentication
authorization
【解决方案1】:
您需要自己执行此操作:使用由用户的 user_id 键入的数据存储模型实现 ACL,并在每个请求上获取并检查它。用户 API 不提供类似的内置功能。
【解决方案2】:
这里只是对管理部分的回答,以及关于如何处理问题其他部分的可能建议:
对于仅限管理员访问,我将以下几行放入app.yaml:
handlers:
- url: /admin/.*
script: main.py
login: admin
- url: /super-restricted-area/.*
script: main.py
login: admin
以上内容会将admin 和super-restricted-area 基本网址仅限于网站管理员。您可以将多个网址限制为管理员。浏览Python Application Configuration doc后,我在配置级别找不到任何分组限制。
对于以下内容,我假设您对 Django 非常熟悉,在视图中使用中间件和装饰器,否则可能需要花很多页来详细解释这两个主题。假设无法在配置级别进行分组限制,您可以尝试将授权代码放在 django 中间件中(如果应用引擎支持它,则应用引擎上的 django 会受到限制)或视图的装饰器中。
在您的中间件或装饰器中,可以从以下内容开始:
from google.appengine.api import users
user = users.get_current_user()
if user:
# Get the group of the user and perform your authorisation
这是above 的参考。