名前空間以外にデータを分割する手法はありますか? ユーザーのグループごとにデータを分割する必要がありますが、一部の管理者ユーザーは、全員のすべてのデータと名前空間のブロックを表示する必要があります。
2 に答える
祖先の道を試しましたか?これは、まったく同じ理由で名前空間の代わりに使用するものです。また、グループ化する必要のあるデータのフォルダーとして機能するエンティティも追加します。たとえば、Subscriberエンティティがあり、Subscriberの子であるUsersというラベルを追加しました。サブスクライバーの特定のインスタンスに属するすべてのユーザーエンティティは、そのユーザーラベルに追加されます。サブスクライバーの祖先クエリを使用して、サブスクライバー、ラベル、およびユーザーエンティティを含むすべてのエンティティを返すことができます。
https://developers.google.com/appengine/docs/python/datastore/entities#Ancestor_Paths
各名前空間に独自の管理者がいるマルチテナント アプリがあります。しかし、あなたと同じように、どの名前空間にもアクセスでき、名前空間管理者が実行できるすべての手順を実行できるスーパー管理者が必要です。
そのため、名前空間ごとに 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)
もちろん、私はこの種のセキュリティ コードをデコレータに入れ、すべてのアプリケーションで再利用しますが、上記のコードの方が理解しやすいです。