Zend_Acl для определенных частей страницы - PullRequest
3 голосов
/ 06 сентября 2010

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

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

Ответы [ 3 ]

5 голосов
/ 11 сентября 2010
// in controller
$this->view->allow_delete_post = $acl->isAllowed($role, 'delete_post');

.

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

Разве это не так?

1 голос
/ 20 мая 2011

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

1 голос
/ 20 мая 2011

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

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

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

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

Надеюсь, это поможет

...