Структурирование Zend_Acl и CRUD с отношениями между родителями и детьми - PullRequest
3 голосов
/ 25 января 2011

Мне интересно, как мне структурировать ACL для CRUD с отношениями Родитель / Ребенок.

Например.Проекты имеют TodoLists.TodoLists имеют Todos

. Существуют различные действия контроллера для проекта

  • / projects / add
  • / projects / edit / {projId}
  • /projects / delete / {projId}
  • / списки задач / add / {projId}
  • / списки задач / edit / {todoListId}
  • ...

Как вы можете видеть, переходя вниз по иерархии, некоторые действия имеют идентификаторы, которые ссылаются не на себя (например, контроллер todo-lists -> ресурс todo-list), а на их родителя

с помощью «У меня есть настройка» (в целом), это выглядит такресурс для имени контроллера

Установить привилегию для имени действия , если задан параметр «id» запроса, получить фактическую сущность (я использую Doctrine ORM), которая реализует Zend_Acl_Resource_Interface.Вот где возникает осложнение.Я обычно получаю ресурс от имени контроллера, но, например, для.с /todo-lists/add я должен знать, чтобы получить родительскую сущность вместо (Project).При такой настройке мне придется изменить привилегию на что-то вроде 'addTodoList'.Таким образом, класс утверждения acl проекта будет иметь дело с TodoLists.Также будет отключение между действиями контроллера и логикой ACL.Это нормально?

Может быть, мне нужно добавить addTodoListAction в ProjectsController вместо TodoListsController?Это упростит мой код ACL, мне не нужно будет проверять и изменять ресурс / привилегии?Я могу просто взять их непосредственно из параметров запроса (имена контроллеров и действий).

Как настроить ACL следующим образом?

1 Ответ

2 голосов
/ 07 февраля 2011

используйте Zend_Acl_Assertion, создайте свое утверждение для projectid и todoId.Во время предоставления разрешения выполните

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

, и вы не можете использовать действие «addTodoListAction» из-за заглавных букв (или определить свой собственный диспетчер) addtodolistAction wd work;

...