2011-01-25 10 views
3

私は、親子関係を使ってCRUDのACLをどのように構造化すればよいのだろうかと思います。親子関係を使ったZend_AclとCRUDの構造

例:プロジェクトにはTodoListsがあります。 TodoListsは

トドスプロジェクトのための様々なコントローラーアクションは/

  • /プロジェクト/
  • /プロジェクト/編集/ {projId}
  • /プロジェクトを追加//{projId}
  • を削除ありき藤堂 - リストの追加//{} projId
  • /TODO-リスト/編集/ {} todoListId
  • ...

階層を下っていくのが分かるように、いくつかのアクションは自分自身を参照していないidsを持っています(例:藤堂 - リストコントローラ - > TODOリストのリソース)が、その親へ

私はセットアップ(一般)を持っているとしてだから、それはこの

  • ACLコントローラープラグイン(をpreDispatch)
    • セットのように見えます要求のparam「ID」が設定されている場合は、実際のentiを取得するアクション名
    • に名前
    • 設定権限をコントローラにユーザーまたは「認証されていない」をLOGGEDINする役割
    • セットリソースty(私はDoctrine ORMを使用しています)はZend_Acl_Resource_Interfaceを実装しています。ここでは、合併症が発生します。私は通常、コントローラー名からリソースを取得しますが、たとえば、 /todo-lists/addの代わりに親エンティティを取得する必要があります(プロジェクト)。この設定で、私は「addTodoList」のようなものに特権を移す必要があります。この方法では、プロジェクトaclアサーションクラスはTodoListsのものにする必要があります。コントローラの動作& ACLロジックの間にも切断があります。それは大丈夫ですか?

たぶん私はProjectsControllerの代わりTodoListsControllerにaddTodoListActionを持っている必要がありますか?これは私のACLコードを簡素化する、私は確認し、リソース/特権を変更する必要はありません?私はただリクエストパラメータ(Controller &アクション名)から直接これらを取ることができます。

どのようにACLをこのように設定しますか?

答えて

2

Zend_Acl_Assertionを使用して、projectidとtodoIdのアサーションを作成します。あなたが原因キャピタル・文字のアクション「addTodoListAction」を

$myAcl->allow($role,'projects','edits',new My_Project_Assertion()); 

を使用することはできません(または、独自のディスパッチャ定義)addtodolistActionのWDの作業を行う許可を与える時に、