0

本质上,我正在为具有业务的客户创建一个 Web 应用程序,该业务将允许其业务的客户能够购买我设置为实体的特定事物。但是,我的客户希望能够有一个特定的页面,他可以在其中发布/上传他的项目的图像,并且基于:

Google App Engine - 查明用户是否为管理员

- 似乎我无法进行管理员登录,那么有没有办法使用用户模型对象通过谷歌帐户为特定用户登录指定特定页面?所以基本上我在想我会创建 2 个不同的 python 和 html 页面,一个用于客户,一个用于管理员/企业所有者。根据特定的登录,我会相应地进行路由。我是 Google App Engine 的相对新手,并且对 Python 有少量经验。企业主创建了应用引擎特定的域名,我被邀请作为开发人员,所以我假设他被认为是管理员,所以我想我可以使用:https ://developers.google.com/appengine/docs/python/用户/管理员用户

我不确定的是,与特定实体关联的图像、字符串、blob 等在写入时是否会显示到两个不同的文件:user.py 和 admin.py。所以我希望企业主能够发布一个项目,而用户能够看到同一个项目。

4

1 回答 1

0

您所描述的基本上是一个 ACL(访问控制列表),它是一种将用户(人或进程)与一组权限(查看、创建、更新、删除等)相关联的机制。

在您的应用程序中,您可以创建一个新的 ACL 模型来存储用户对象和一组权限之间的关系。在您的每个页面中,检查当前用户是否具有在该页面上执行指定操作的适当权限(例如,将当前用户与您正在检查的权限配对的 ACL 模型实例)。

您可以使用“角色”的概念进一步抽象这一点,“角色”是权限的集合。例如,您可以创建一个“管理员”角色,具有查看管理页面以及创建或删除实体的权限。“客户”角色可能只有查看实体的能力。

下面是一些示例代码,演示了您的应用程序如何使用它:

class ACL(db.Model):
  user = db.UserProperty()
  permissions = db.ListProperty(str) # there are lots of other ways to store the permissions as well

添加管理员用户后,您将在数据存储中拥有如下所示的一行:

User                  Permissions
admin@example.com     ['ADMIN_VIEWER', 'ADMIN_EDITOR']

在管理页面上的代码中,您可以执行以下操作:

user = users.get_current_user()
acl = db.GqlQuery("SELECT * FROM ACL WHERE user = :1", user).get()
if 'ADMIN_VIEWER' in acl.permissions:
  # continue
else:
  # unauthorized

如果您预计会进行多次查找,您可以将当前用户的 ACL 放入 memcache 中。

于 2012-07-18T21:30:02.190 回答