google-app-engine - 如何使用 golang 中的命名空间从数据存储中查询实体?

标签 google-app-engine go google-cloud-datastore google-cloud-platform

我正在开发一个 Multi-Tenancy 应用程序,我需要从 KIND 和特定命名空间查询特定用户。

我能够从默认命名空间获取值。我在这里使用的包是“google.golang.org/appengine/datastore”

q := datastore.NewQuery(ENTITYNAME).Filter("Name =", ed.Expense.Name)
    var expenses []ExpenseEntiry
    return q.GetAll(ed.Ctx, &expenses)

最佳答案

命名空间值不是查询的一部分(它不是查询的属性)。命名空间来自执行查询时传递的上下文,例如至 Query.GetAll() .

如果您有一个上下文(您将其传递给q.GetAll()),您可以使用appengine.Namespace()创建具有给定命名空间的派生上下文。功能。

例如:

ctx2, err := appengine.Namespace(ed.Ctx, "mynamespace")
// check err

并使用这个新上下文传递给Query.GetAll():

return q.GetAll(ctx2, &expenses)

您很少需要创建具有不同命名空间的新上下文,ed.Ctx 应该已经是具有正确命名空间的上下文。因此,当您创建 ed.Ctx 时,您应该已经在那里应用了命名空间,这样您就可以避免“意外”暴露其他租户的数据(这是一个主要的安全问题)。

关于google-app-engine - 如何使用 golang 中的命名空间从数据存储中查询实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47174559/

相关文章:

regex - 使用正则表达式验证密码

google-app-engine - 在测试期间控制最终的 AppEngine 数据存储一致性

java - 如何将键列表与实体关联

java - 无法使用 GAE/J DataNucleus 插件版本 2.1.2 获取新创建的 JDO 持久实体的 ID

java - DWR有时会死在GAE服务器上

python - 如何使这个 Python 函数异步?

python - 我们如何忽略 NDB 缓存的查询结果?

java - GAE appcfg 回滚不起作用 : 409 Conflict Another transaction by user is already in progress for app:

go - 在 go 中重新 slice 2d slice

go - 为什么 'new'和 'make'不是保留关键字?