Связывание Zend_Acl с Zend_Navigation

Я хочу, чтобы в навигации отображались только элементы, разрешенные Acl, но у меня возникают проблемы с связыванием навигации с Acl - когда я это делаю, как показано в официальный пример или некоторые другие ресурсы в Интернете, моя навигация по-прежнему показывает все элементы, как и без Acl.

В Bootstrap я делаю:

$view->navigation()->setContainer($container);
$view->navigation()->setAcl($acl)->setRole("1");

Где :

  • $ view - это объект Zend_View
  • $ container - объект Zend_Navigation
  • $ acl - объект Zend_Acl

У меня есть начальный массив навигации, настроенный должным образом, объекты acl и навигации также кажутся прекрасными и содержат то, что они должны содержать, поэтому я не собираюсь публиковать их здесь.


На данный момент мы добились его работы с использованием таких конструкций, как:

if(!$acl->isAllowed(/* auth data, controller, action */)) {
    unset(/* this page from pages array */);
}

но это совсем не красиво и не похоже на однострочник в официальном примере.


У меня вопрос: в чем, скорее всего, заключается моя проблема, и какие наиболее типичные проблемы и ошибки допускают разработчики при объединении Zend_Navigation с Zend_Acl?

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


person bogatyrjov    schedule 19.10.2012    source источник
comment
Дополнительный вопрос касается setRole (1) - в настоящее время я передаю ему идентификатор роли, поскольку массивы ролей содержат только идентификаторы. Это правильное использование setRole ()?   -  person bogatyrjov    schedule 19.10.2012


Ответы (1)


У меня есть предложение. Почему вы не можете написать для этого помощника представления (с модулем, контроллером, действием в качестве параметров)? И в этом помощнике представления вы можете проверить доступ.

Таким образом, вместо простого перенаправления вы можете использовать viewhelper для проверки доступа и перехода к действию.

Это то, что вы ищите?

person harry    schedule 20.10.2012