4

PHPとZend_ACLを使用して、非常に柔軟な権限システムを作成したいと思います。特定のタイプのすべてのオブジェクトと、それらのオブジェクトのインスタンスにアクセス許可を割り当てられるようにしたい。オブジェクトの特定のインスタンスが照会され、それがリソースツリーに存在しない場合は、「generic」オブジェクトに設定された権限を使用できます。私の問題は、これをネストする必要があり、Zend_ACLがサポートしていない多重継承なしでそれを行う方法を理解できないことです。

例はこれです。学部、コース、イベントを備えたオンライン学習サイト。各イベントはコースに属し、各コースは教員に属します。各学部の役割がすべてのコース(および継承によるイベント)にアクセスできるようにしたいと思いますが、特定の学部はその資料を非公開にしたいと考えています。そのため、リソースツリーの構造に各学部のリソースノードを作成し、各コースにデフォルトのアクセス許可を与える汎用コースノードから分岐するのではなく、各学部に属する各コースを学部ノードから分岐させます。新しい構造で、一般的なコースの権限をどのように適用できますか?親コースが読み取り可能である場合にのみ各イベントを読み取り可能にしたいが、各イベントにデフォルトの権限セットを適用したい場合は、コースの下のイベントにも同じことが言えます。

別のシステムに関する質問、コメント、提案は大歓迎です。

4

2 に答える 2

2

多重継承の問題はすべてあなたの頭の中にあります-もちろん複数の学部にある可能性がない限り-など.基本の「コース」からACLを変更できる追加の「親リソース」を構築します。

コースが教職員のアクセス許可を直接継承することは望ましくありません。おそらく、誰かがその学部 (TA など) のコースを編集できるようにしたいでしょうが、学部自体は編集できませんか?

学部、コース、およびイベント。各イベントはコースに属し、各コースは学部に属します

Parent -> middleman -> child
Courses -> Courses:Faculty2 -> Courses:Faculty2:Course1 
Events -> Events:Course1 -> Events:Course1:Event3

これにより、教員ごとにコースのグループが提供されますが、デフォルトのコース権限は引き続き継承されます。各リソースを追加するときは、リソース全体の親であるグループ リソースの親にするだけです。

特定のコースのすべてのイベントを非表示にする場合は、Event:Course# に許可を設定するだけです。

教員のすべてのイベントに許可を設定できるようにしたい場合は、Event:Course1 の上にもう 1 つの「仲介者」の親を追加して、同様に教員別にイベントをグループ化することができます。Events:Faculty2:Course1:Event3

10 回中 9 回のパーミッション システムで、複数の継承が必要ない (または混乱したくない) ことがわかりました。アクセス制御が単純なツリーよりも複雑な場合は、アクセス制御を再評価する必要があります。

于 2009-08-11T08:22:29.157 に答える
0

Zend ACL は非常に柔軟です。子からのアクセス許可は、親リソースから継承されたアクセス許可を上書きします。あなたの例を完全には理解していなくても、Zend ACL モデルがあなたの設計をサポートしていると思います。特定のロールの特定のリソースに問題なくアクセスできます。

それにもかかわらず、追加の自由度を与えるアサーションについても読むことができるかもしれません。

于 2009-06-15T14:10:09.893 に答える