3

親子関係を持つCRUDのACLをどのように構成すればよいのでしょうか。

例えば。プロジェクトにはTodoListがあります。TodoListsにはTodosがあります

プロジェクトにはさまざまなコントローラーアクションがあります

  • / projects / add
  • / projects / edit / {projId}
  • / projects / delete / {projId}
  • / todo-lists / add / {projId}
  • / todo-lists / edit / {todoListId}
  • ..。

階層を下に行くことがわかるように、一部のアクションには、それ自体ではなく(たとえば、todo-lists controller-> todo-list resource)、それらの親を参照するIDがあります。

だから私がセットアップしたので(一般的に)、それはこのように見えます

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

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

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

4

1 に答える 1

2

Zend_Acl_Assertionを使用して、projectidとtodoIdのアサーションを作成します。許可を与えるときに

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

また、大文字の文字(または独自のディスパッチャーを定義する)があるため、アクション「addTodoListAction」を使用できません。addtodolistActionwd work;

于 2011-02-07T15:38:46.753 に答える