PHPWebアプリケーションのアクセス制御リストの実装を手伝ってください。特にZend_ACLを使用しています。
どの特定のエンティティ(ユーザーまたはグループ)がどのリソースにアクセスできるかを、アプリケーション全体できめ細かく制御したい。特定のリソースインスタンスだけでなく、そのタイプのすべてのリソースへのアクセスを許可できるようにしたいと思います。例えば:
- ユーザー#1には、すべての投稿に対する編集権限があります
- ユーザー#2はゲストエディターであり、投稿ID#5の編集権限を持っています
- グループ#1(ゲスト)はすべてに対して読み取り権限を持っています
- ユーザーは、ゲストから継承するユーザーグループに属しています。
私の質問はこれです:ACLはリソースのタイプまたはそこにある特定のインスタンスを参照する必要がありますか?次のようなACLを使用して、ユーザーに基本的なリソースタイプ全体の特権を付与する必要があります。
- 投稿時にユーザー#1に編集を許可する
- ユーザー#2に継承以外の何物も与えない
- グループ#1にすべてのリソースの読み取りを許可する
- 例外テーブルを実装して、特定のリソースの許可と拒否を追跡します
または、さまざまな種類のリソースのすべての個別のインスタンス用のリソースを作成し、すべてのユーザーがすべてのリソースを読み取れるように大暴れする必要がありますか?かなり野蛮なようです。
私の現在の解決策は次のとおりです。リソースの継承を使用して、タイプのない親のほとんどのリソース、タイプごとにこのルートの子、インスタンスごとにタイプごとの子を作成します。これにより、1つの特定のタイプを許可していくつかのインスタンスを拒否するか、特定のタイプを拒否して1つのインスタンスを許可することができます(上記のユーザー#2の場合のように)。これは私の許可システムをうまく統合しますが、私のニーズはもっと複雑です。間もなく、リソースタイプがネストされます。だから私は親または子になることができるさまざまなモジュールになります。例:サイト全体のフォトギャラリーモジュール、その下に別のより排他的なギャラリーが存在するアナウンスモジュール。これに対処するために何をすべきかよくわかりません。私はまだすべてのギャラリー、または1つだけ、またはその下のいくつかの写真に付与する機能を持ちたいと思っています。Zend_ACLはそうではないことに注意してください
これを実装するための最良の方法は何ですか?すべてACLを使用するか、各モジュールに組み込まれているロジックを使用しますか?