2

google-app-engine db.Model (および/または ndb.Model) でレコード レベルのアクセス許可と属性レベルの可視性を実現するための推奨されるプラクティスまたはフレームワークはありますか?

モデルフックについて読んだことがありますが、これを行うための既存の推奨されるベストプラクティスがあるかどうかを知りたいです.

class Person(db.Model):

 first_name = db.StringProperty()
 last_name = db.StringProperty()
 city = db.StringProperty()

 # Record level permissions:
 #  "top" visible only to managers
 #  "medium" visible to managers & supervisors
 #  "none" visible to all (unless other permissions restrict)
 secrecy = db.StringProperty(required=True, choices=set(["top", "medium", "none"]))

 birth_year = db.IntegerProperty() # Accessible only with "Manager" permission
 height = db.IntegerProperty() # Writable only with "Supervisor" permission

これについてさらに説明します。ユーザーが単純な JavaScript RPC 呼び出しを介して任意の GQL クエリと DML を実行できるようにするため、これらの権限チェックをモデル レベルにする必要があります。

4

1 に答える 1

1

エンティティ レベル (= レコード レベル) のアクセス許可については、 Namespaces APIを調べる必要があります。Afaik、プロパティ レベルのアクセス許可のためのすぐに使えるソリューションはありません。これを自分でコーディングする必要があります。

名前空間は、名前空間をエンティティ キーに追加することで機能することに注意してください。つまり、クロスネームスペース クエリを実行できず、エンティティを取得するには、名前空間を (種類、親、ID/名前と共に) 知る必要があります。

名前空間は、マルチテナンシーを実現する効果的な方法です。たとえば、完全に別々の顧客に同じ GAE アプリを使用させる方法で、コード エラーによってある顧客のデータが他の顧客に公開される可能性を防ぎます。

于 2013-02-08T20:53:43.487 に答える