2009-05-20 7 views
0

PHP Webアプリケーションのアクセス制御リストを実装するのを手伝ってください。私は特にZend_ACLを使用しています。ACLに含まれるリソースは?オブジェクトのモデルまたはオブジェクトのインスタンス?

どのような特定のエンティティ(ユーザーまたはグループであるか)がどのリソースにアクセスできるかについて、きめ細かなアプリケーションの制御が必要です。私は、特定のリソースインスタンスへのアクセスだけでなく、そのタイプのすべてのリソースへのアクセスを許可したいと考えています。たとえば:

  • ユーザ#1は、すべての記事に編集権限を持っている
  • ユーザ#2は、ゲストエディタで、ポストID#5
  • グループ#1(ゲスト)に編集権限を持っている上の権限を読みましたすべて
  • ユーザーはguestから継承したユーザーグループに属します。

私の質問は次のとおりです。ACLはリソースのタイプまたはその特定のインスタンスを参照する必要がありますか?

  • ポスト付与ユーザーには継承
  • 助成金グループのより多くの#2は何も上のユーザ#1に

    • 助成編集:私は、ユーザーに基本的な、リソース型ワイドのこのようなACLを使用してpriviledgesを付与する必要があります#1は
    • は、特定のリソース

    または私は資源の私の異なったタイプのすべての個々のインスタンスのためのリソースを作成する必要に助成金やデニス・追跡するために、例外テーブルを実装するすべてのリソースに読んですべてのユーザーがすべてのリソースを読むことができるように、認可の暴走を続けますか?むしろ凶悪なようです。

    私の現在の解決策は、リソース継承を使用して、タイプのない親の最もリソースを作成し、各タイプに対してこのルートの子を作成し、次に各インスタンスの各タイプの子を作成します。これにより、ある特定のタイプを認可し、いくつかのインスタンスを拒否したり、特定のタイプを拒否したり(ただし、上記のユーザ#2のように)1つのインスタンスに付与することができます。これは私の許可システムをうまく統合しますが、私のニーズはより複雑です。すぐに、リソースタイプはネストされます。だから、私は両親や子供になることができる別のモジュールを用意します。一例:サイトワイドフォトギャラリーモジュール。アナウンスメントモジュールの下に別のより独占的なギャラリーがあります。私はこれに対処するために何をすべきかについてはあまりよく分かりません。私はまだ、すべてのギャラリーに、あるいはただ1つに、あるいはその下にあるいくつかの写真を付与する能力を持っていたいと思います。 Zend_ACLは、リソースの多重継承をサポートしていないことに注意してください。

    これを実装する最良の方法は何ですか?すべてのACLを使用するか、または各モジュールに組み込まれたロジックを使用していますか?

  • 答えて

    1

    私はちょうどSO995925: How should I structure my tree of resources in an ACL?に答えました。私があなたに持っているアドバイスは全く同じです。

    あなたの頭の中のすべて - 「アナウンスメントギャラリー」は、「写真ギャラリー」の子リソースです。ジェネリックギャラリー#1の親が「写真ギャラリー」に、「アナウンスギャラリー」が「アナウンスギャラリー」にペアレント。ツリーを再度分割する必要がある場合は、チェーンに別の親リソースステップを追加することができます。

    まだ単純なツリーの継承チェーン。

    +0

    あなたの答えはまさに私が必要としていたものでした。ありがとう! – hornairs

    0

    あなたのソリューションプランは、ほとんどのシステムが動作する方法です、と私は考えました。 Windowsファイルシステムはそのように機能します。これまでDCEで使用していた最初のACLシステムは、そのように機能しました。

    あなたが把握しなければならないものは継承です。動的に継承するのか、またはリソースが作成された時点で継承しますか?

    +0

    継承は動的ですが、私のリソースは親を1つしか持てません。つまり、親リソースタイプ(モデルリソースを継承するインスタンス)から継承することも、親からリソースの構造を継承することもできます(上の例では、ギャラリーはアナウンスページを継承します)。私は両方の機能を望みますが、複数のことから継承することはできません。 – hornairs

    関連する問題