Показать / Скрыть элементы в представлениях Zend на основе роли пользователя? - PullRequest
0 голосов
/ 02 февраля 2012

Я новичок в Zend и PHP и готовлюсь начать работу над приложением типа портала, в котором будут размещаться несколько внутренних приложений.Я уже настроил Zend_Auth и теперь могу войти через Active Directory.

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

После некоторых исследований я обнаружил, что обычно объединяют Zend_Acl с Zend_Navigation, но иногда возникают проблемы с этим.1005 *

Что было запрошено, так это то, что * кроме использования плагина фронт-контроллера для проверки доступа к ресурсам / привилегий для каждого запроса, мы вместо этого контролируем элементы, показанные в представлении (HTML) пользователю.Например, если пользователь «Боб» не имеет доступа к приложению блога, мы не хотим, чтобы Боб видел это в своем навигационном меню.

Мне, представляя всю эту логику и проверяет, если в представленияхнеправильно;Я думаю, что они должны оставаться настолько глупыми, насколько это возможно.Есть ли лучший способ справиться с этим?Условно отображать или скрывать элементы на основе роли пользователя в вашем коде представления кажется мне неправильным.

1 Ответ

1 голос
/ 02 февраля 2012

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

В вашем контроллере вам нужно будет передать объект ACL представлению для использования: -

$this->view->acl = $acl;//instance of Zend_Acl

Тогда у вас естьпомощник вида для рендеринга некоторого элемента: -

class Zend_View_Helper_SomeElement extends Zend_View_Helper_Abstract
{
    public function someElement()
    {
        $html = '';
        if($this->view->acl->isAllowed('guest', null, 'view'){
           $html .= "<div>Top secret content</div>\n";
        }
        return $html;
    }
}

Тогда ваш вид прост: -

echo $this->someElement();

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

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

...