Neo4jを使用するアプリケーションで階層的にアクセスポリシーを定義する必要があります。neo4jでカスタムユーザーアクセス許可を実装する方法は?
モデル:アプリケーションは、ツリー構造を使用して(各Node
は、ちょうど1つの親を持っている)、簡略化のため
(:Node)-[:SUBTREE_OF]->(:Node)
として表すことができます。
User
のメンバーは、Group
のメンバーであり、Permission
sです。アクセス権には、アクセス許可が設定されているオブジェクトのIDを含むobjectId
とWRITE
、READ
またはNONE
のいずれかのという2つのプロパティが含まれています。
ので
(u:User)-[:MEMBER_OF]->(g:Group)
(g:Group)-[:WITH]->(p:Permission{objectID:"99", accessLevel:"WRITE"})
問題:すべての子によって継承できるオブジェクトのための可能な指定許可のアクセスレベルを確認する必要があります。これは、特定のアクセス権レベル、具体的にはUser
を実行時に特定する必要があることを意味します。アクセス権が指定されていない場合はこのオブジェクトに最も近い指定された親アクセス権を指定します。
プロパティが指定されたNode
または最も近い親Node
を返すクエリを書き込む方法はありますか?
a:PermissionのobjectIDが参照するオブジェクトは、ツリー構造のノードと同じですか?パーミッションがツリー構造内のノードを直接対象としている場合:パーミッションは以下のものの一部にすぎません:グループ、グラフをリファクタリングして簡単にクエリを実行できる機会がいくつかあります。また、次のようにします:Permissionオブジェクトは、objectIDとaccessLevelだけを格納するか、他のフィールドはありますか? – InverseFalcon
@InverseFalconオブジェクトには、次のものがあります。アプリケーションとノード: :アプリケーションは親のためのものです:Node's、しかし私は単純化のためこれを省略することにしました。 :アクセス権はObjectIDとaccessLevelだけを格納します。 – Polyakoff
さて、意味があります。 a:ノードに関連付けられていない場合:a:グループからのアクセス許可:グループの場合、アプリケーションは保証されますか?または上記の他のノードタイプがありますか?アプリケーションには:許可が必要ですか?存在しない場合に使用する必要のある既定のアクセス許可がありますか?階層上の任意のノードに対してアクセス許可が存在しますか? – InverseFalcon