Нужны предложения по настройке Zend_Acl

Предположим, у меня есть классы/модели

  • Проекты (имеет много списков)
  • Списки

Я хочу, чтобы только пользователи, которые являются соавторами проекта, могли добавлять списки. Как я это сделал. Я знаю, что должен использовать Zend_Acl_Assert, но что мне передать в качестве ресурса. Для редактирования/удаления я передам сам список. Для добавления кажется, что это должен быть проект. Что кажется более правильным, если я перемещу ListsController#addAction() в ProjectsController#addListAction()? это 1 вариант

Но если я хочу сделать что-то вроде ListsController#addAction(), как я могу настроить свой ACL?

$acl->allow('user', 'list', 'add', new assertClass());

Будет передавать «список» в качестве ресурса. Могу ли я как-то вместо этого передать объект проекта? вроде смысла нет


person Jiew Meng    schedule 21.12.2010    source источник


Ответы (2)


Могу ли я как-то вместо этого передать объект проекта?

Пока объект реализует Zend_Acl_Resource_Interface и зарегистрирован в ACL, вы можете использовать все, что захотите.

person Phil    schedule 21.12.2010
comment
Вы имеете в виду, что я могу передать любой объект, реализующий Zend_Acl_Resource_Interface, в Zend_Acl_Assert_Interface#assert()? Но с чем-то вроде $acl->allow('user', 'list', 'add', new assertClass()) как я могу это сделать? - person Jiew Meng; 22.12.2010
comment
Эм, знаешь, обычно я думаю, что нам следует работать с Zend_Acl, а не с базовым Assert_Interface? - person Jiew Meng; 22.12.2010
comment
@jiewmeng Это правильно. Объект интерфейса assert получит ресурс, переданный isAllowed() - person Phil; 22.12.2010
comment
тогда как бы вы определили acl таким образом, чтобы при запросе пользователя на добавление списка проект передавался в acl/assert. Что-то вроде $acl->isAllowed($user1, $project1, 'add') противоречит здравому смыслу, если я хотел добавить список, не так ли? - person Jiew Meng; 22.12.2010

Почему вы передаете список для редактирования и удаления, кажется ненужным? Выполнение этого без передачи списка будет работать нормально.

Если вам требуются дополнительные проверки, я добавил проверку surePermission для моей модели preSave, которая среди прочего проверяет ACL, чтобы определить, все ли в порядке.

person balupton    schedule 21.12.2010
comment
Я передаю список, чтобы убедиться, что пользователь является владельцем проекта/списка, чтобы иметь возможность редактировать/удалять - person Jiew Meng; 22.12.2010