2

私は、他のサイトと同様に、ここSOでZend_Aclを実装する方法についてのチュートリアルと回答を探して1日を過ごしました。そして、私は頭痛がしました。:バツ

特定のコントローラー/アクションへのアクセスを許可または禁止するために使用している人や、この方法は正しくないため、モデルに基づいてアクセスを許可または禁止する必要があると言う人を見かけました。ええと、2番目は実行可能に見えますが、これはすべてのコントローラーにモデルが必要であることを意味しますか?2番目の方法に従うと、たとえば投稿を編集しているときにのみ、ユーザーアクセスをブロックできるようになります。ただし、投稿を編集するコントローラーのアクションにアクセスできないようにしたいと思います。

コントローラーZのアクションYへの役割Xを持つユーザーへのアクセスをブロックしたい場合、2番目の選択肢に従うとどうすればよいですか?

実際のアプリケーションの例は大歓迎です。

この情報はあなたの答えを改善することができます: 私はORMとしてDoctrine 2を使用し、モジュールAdminを持っています。私のアプリケーションの実際の構造は次のようになります。

application
  - MYAPP
    - configs
    - controllers
    - layouts
    - views
    - library
       - MYAPP ;This folder is in the include path
    - modules
       - admin
4

1 に答える 1

5

私は専門家ではないことを告白しZend_Aclますが、使用の本質はZend_Acl、役割、リソース、および特権を識別することです。役割は通常かなり明白です。そして、リソースを明確に特定すると、多くの場合、特権が明らかになります。

私にとって重要なのは、リソースを特定することです。

あなたの状況では、コントローラーをリソースとして明示的に識別したようです。よりきめ細かいアクセス制御が必要な場合は、権限をアクションとして定義できます。これは、モデルを使用する必要のないコントローラー (特定のタイプのログイン ユーザーにのみ表示する必要がある静的ページなど) でさえ、ACL で制御できるほど十分に柔軟なようです。

リソース/権限が「自然に」モデル/メソッドに対応していることに気付く場合があります。しかし、コントローラー/アクションが、プログラム フローと ACL 要件の理解とより密接に一致している場合、ACL をそのパラダイムに強制する必要はないと思います。

あなたの質問に対する直接的な答えではありません。自分の状況に忠実であるようにというアドバイスのようなものです。

于 2011-06-12T08:06:50.807 に答える