2017-11-08 10 views
1

私はマルチテナントアプリケーションに取り組んでいます。私はKINDと特定の名前空間から特定のユーザーを照会する必要があります。私は私がここで使っているデフォルトNamespace.theパッケージから値を取得することができています名前空間でデータストアからエンティティを検索する方法golangで?

"google.golang.org/appengine/datastore"

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

答えて

3

名前空間の値が(それは、クエリのプロパティではありません)クエリの一部ではないです。名前空間は、クエリを実行するときに渡すコンテキストから来ます(例: 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を作成する場合は、既にそこにネームスペースを適用しておく必要があります。これにより、他のテナントのデータが偶発的に公開されるのを防ぐことができます(これは大きなセキュリティ上の問題です)。

+0

ありがとうございます、それは働いています:) –

+1

@NagarajaSV、もしあなたが働いていれば、答えをアップアップすることもできます。 –

関連する問題