是否有任何技术而不是命名空间

时间:2012-08-29 15:43:31

标签: google-app-engine google-cloud-datastore

是否有任何技术可以对命名空间以外的数据进行分区?我需要为每组用户分割数据,但是一些管理员用户应该看到所有人的所有数据和命名空间块。

2 个答案:

答案 0 :(得分:1)

你尝试过祖先的路径吗?这是我们使用而不是命名空间的原因完全相同。我们还添加了作为文件夹的实体,用于分组所需的任何数据。例如:我们有一个Subscriber实体,我们添加了一个名为Users的标签,它是Subscriber的子节点。属于订户的特定实例的所有用户实体,我们添加到该Users标签。订阅服务器上的祖先查询可用于返回所有实体,包括订阅服务器,标签和用户实体。

https://developers.google.com/appengine/docs/python/datastore/entities#Ancestor_Paths

答案 1 :(得分:1)

我有一个多租户应用,其中每个命名空间都有自己的管理员。但是,和你一样,我希望有一个超级管理员可以访问任何命名空间并执行命名空间管理员可以执行的所有过程。

所以我为每个命名空间创建了一个管理员实体,但我在空命名空间上创建了一个超级管理员实体。所以我使用默认(空)命名空间来存储全局实体。通过执行此操作,您只需在查找超级管理员之前将命名空间设置为空,必须小心设置原始名称空间。

YourHandler(RequestHandler):
    original_ns=namespace_manager.get_namespace()
    namespace_manager.set_namespace("")

    #Look for Super Admin Here
    ...
    # Return to original ns
    namespace_manager.set_namespace(original_ns)

当然我把这种安全代码放在装饰器中,通过所有应用程序重用它,但上面的代码更容易理解。