0

除了命名空间之外,还有什么技术可以对数据进行分区吗?我需要为每组用户拆分数据,但一些管理员用户应该看到每个人的所有数据和命名空间块。

4

2 回答 2

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)

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

于 2012-08-29T19:02:41.037 回答
1

你试过祖先路径吗?出于完全相同的原因,我们使用它来代替命名空间。我们还添加实体,作为您需要分组的任何数据的文件夹。例如:我们有一个订阅者实体,并且我们添加了一个名为用户的标签,它是订阅者的子实体。属于订阅者特定实例的所有用户实体,我们添加到该用户标签。订阅者上的祖先查询可用于返回所有实体,包括订阅者、标签和用户实体。

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

于 2012-08-29T18:25:52.380 回答