2010-09-06 3 views
3

Я знаю, как использовать Zend_Acl, чтобы разрешить определенные ресурсы определенным группам пользователей, но как я могу использовать его, чтобы показывать только определенные части страницы? НапримерZend_Acl для конкретных частей страницы

У меня есть кнопка для удаления сообщения через AJAX на странице, но я хочу показать кнопку только Администраторам. Я могу использовать Zend_Acl для блокировки доступа к пост/удалению контроллера, но я не могу использовать его, чтобы заблокировать показ кнопки.

ответ

5
// in controller 
$this->view->allow_delete_post = $acl->isAllowed($role, 'delete_post'); 

.

// in template 
<? if ($this->allow_delete_post): ?>[button html]<? endif; ?> 

Не так ли?

+0

Спасибо, мой добрый сэр. – BRampersad

1

Вы также можете написать собственный статический класс ACL, который затем можно вызвать непосредственно из сценария просмотра.

Поскольку ACL обычно обрабатываются на уровне плагинов это означает, что если ваш посетитель видит вид, то ACL уже позволило ресурс, для этого внутри вашей точки зрения вы можете сделать что-то вроде этого ...

 
    if(My_Custom_Acl::getIsAllowed('some_resource', 'delete_post_action'){ 

Я не указывал имя роли в пользовательском методе getIsAllowed(), потому что в этот момент ACL уже должен знать идентификатор пользователя и роль.

Надеется, что это помогает

1

Хотя Кристофа дал хорошее решение, альтернатива является разделение мнений. Хотя это начинает нарушать DRY, когда у вас около 200 различных элементов/элементов администрирования, он становится тяжелым в представлении - таким образом, разбивая представление с помощью $ this-> render ('view') и $ this-> render ('edit') для разрешений от контроллера иногда проще. Тогда только сценарий редактирования имеет ссылки на редактирование. Но опять же, это СУХОЙ, поэтому не оптимальный, а альтернатива. Я думаю, вы должны взвесить его, какой из них более сухим, повторяя проверку ACL или материал в двух видах ...

Смежные вопросы