2012-03-20 11 views
1

各レベルで異なるレベルのアクセス権を持つ115レベルの階層を作成する方法。
シナリオは、1つのルートノードを持つ階層(ツリー)を作成し、そのノードの下に3つのサブノードが存在するようにしたいのです。これらの3つのサブノードのそれぞれの下に、さらに3つのサブノードが存在する。このようにして、階層は115レベルまで拡張されます。ルートノードには、階層の終わりまでその下にあるすべてのノードのデータを表示するアクセス権があるという制約があります。ツリー内の他のすべてのサブノードには、その下にあるサブノードのデータと、その下に来る後続のサブノードのデータを階層の終わりまで表示するアクセス権が与えられます。php:各レベルで異なるレベルのアクセス権を持つ115レベルの階層を作る方法。

+1

聖なる牛、あなたは何のために多くの特権を必要としますか? o_O – Amber

答えて

1

おそらくこのような複雑な構造をデータベースに反映させたいと思うでしょうから、私の提案された解決法は言語に依存しません。

よう

のParentIDは上位に参照する外部キーである
Table Nodes: ID, ParentID, Name, Content 

ようなテーブルを作成します。ルートにはParentID = nullがあります。

別のテーブルあなたはノードへのアクセス権を与える

Table Node_Rights: NodeID, UserID 

を作成します。

これで、すべての階層をループすることでユーザーのアクセス権を明らかにすることができました。これにより、多くのSQLクエリが効果的に使用されます。私はこれらのクエリを1回またはユーザ/アクセス権が変更されるたびに実行し、その結果を別のテーブルに保存する必要があると思います。次のようになります。

Table Transivite_Node_Rights: NodeID, UserID 

この表は、このような大きな構造を実現するためのキャッシュです。

+1

か、代わりに[ネストされたセット](http://en.wikipedia.org/wiki/Nested_set_model)を使用して、単一のクエリを持つユーザーのすべてのノードを取得することができます。 :) – Yoshi

+0

@ Yoshi:ええ、良いアルゴリズム、共有のおかげで。 – Tarnschaf

関連する問題