3

簡単に言うと、Zend ACL がリソースではなくロール間の多重継承をサポートするのはなぜですか?

アクセス許可を付与できるようにしたいリソースの大きなツリーがあります。過去に、これを表現するために私が行ったことは、2 つの異なるツリーを作成することでした。最初のものには、ツリー内の各タイプの汎用リソースがあります。2 番目には、これらの型のすべてのインスタンスが同じ方法で配置されています。木を重ね合わせると、同じレベルに同じタイプのオブジェクトが見つかることを意味します。次に、各オブジェクト インスタンスは、追加の親として最初のツリーのジェネリック オブジェクトを持つように設定されます。これにより、すべてのタイプのオブジェクトにデフォルトのアクセス許可を設定できるため、各インスタンスはそれらを定義する代わりにそれらを継承しますが、それでも各インスタンスへの洗練された特定のアクセス権を与えてくれます。

例:

サイトには 3 つのモジュールがあります。ユーザーは、ユーザー プロファイルなどを格納する場所です。現在の問題について活発な議論が行われるフォーラム ユーザーがペットの写真をアップロードできるギャラリー

したがって、上記のジェネリック ツリーは次のようになります。

                        モジュール
                    / | \
                  ユーザー フォーラム ギャラリー
                  / | \
               プロフィールのトピックの写真
                          | |
                         役職

インスタンス ツリーは次のようになります。

                        モジュール_1
        / / / | \ \           
    ユーザー1 ユーザー2 ユーザー3 フォーラム ギャラリー1 ギャラリー2
      | | | | | | / \ / \ / \
プロフィール プロフィール プロフィール sub1 sub2 写真 写真 写真 写真
                         | | / \
                     ポスト1 ポスト2 ポスト3

また、ACL では、各ユーザー オブジェクト インスタンスが最初のツリーのユーザーから継承されます。したがって、デフォルトですべてを読み取り可能にしたいので、モジュールでの読み取りを許可します。すべてモジュールから継承しているので、すべて良いです。また、ユーザーが自分のプロファイルを編集できるようにしたいので、それぞれのプロファイルで各ユーザーに編集を許可します。ジェネリック ツリーはここでは役に立ちません。私のフォト ギャラリーが NSFW であるとしましょう。多重継承により、未登録ユーザーの写真の読み取りを 1 回の操作で拒否できます。多重継承がなければ、すべての写真を調べて、未登録ユーザーの読み取り権限を拒否する必要があります。写真がたくさんある場合、これは悪いニュースです。

これを行う方法を知っている人はいますか?私が考えることができる最も柔軟なソリューションを提供します。Zend_Acl を使用して実装できるより良いものを考えられる場合は、返信してください。

どうもありがとう。

4

2 に答える 2

4

まず、ご質問にお答えします。リソースの多重継承。リソース ツリーは、保護している物理リソースを複製するように設計されているため、Zend_ACL はこれをサポートしていません。たとえば、ファイルを複数の親ディレクトリに存在させることはできません。

そのため、解決策を提供するには...

  • あなたの「ジェネリック」ツリーがあなたのリソースだと思います。

  • ロールはユーザー グループを表す必要があるため、匿名、登録済み、モデレーター、管理者などです。より寛容な各ロールは前のロールから継承する必要があるため、「登録済み」は「匿名」から継承し、「モデレーター」は「登録済み」などから継承します。これにより、各レベルは、その親のすべての権利を持ち、いくつかを追加します。

  • 私が説明したような構造を使用すると仮定すると、権限を使用して可能なユーザー アクションを割り当てることもできます。すなわち。「表示」、「編集」、「追加」、および「管理」については、リンク テキストを参照してください

  • 「モジュール」の匿名ロールに「表示」権限を割り当てる必要があります。これにより、全員に読み取りアクセス権が付与されます。

  • 「フォーラム」で登録されたロールに「追加」権限を割り当てる必要があります。そこでは、読み取り (匿名ロールから継承) と登録ユーザーへの追加の両方を与えます。

  • 「ギャラリー」の登録済みロールに「追加」権限を割り当てる必要があります。そこでは、登録ユーザーに読み取り (再び継承) と追加の両方を付与します。

  • モデレーター、管理者などのためにすすぎ、繰り返します。

  • ユーザーが自分のプロファイルや画像のアップロードなどを変更できるようにするには、このレベルでの対話の処理に ACL を使用しません。リソースを表すオブジェクト (Image オブジェクト、Profile オブジェクトなど) に isOwner メソッドを作成するだけで、現在ログインしているユーザーがそのアイテムを所有しているかどうかに基づいてブール値を返します。このようにして、そのユーザーにそのプロファイル/画像の編集/削除/などを許可するかどうかを決定できます。

これが役に立つことを願っています!

于 2009-05-14T22:26:59.550 に答える