2012-02-02 2 views
0

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

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

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

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

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

+2

Вот аналогичный вопрос, проверьте его: http://stackoverflow.com/questions/8907820/acl-and-appearance-manipulation-of-links-forms-and-dom-elements Кроме того, я надеюсь, когда вы написал «вместо использования плагина переднего контроллера», вы на самом деле означали «помимо использования плагина переднего контроллера»;) – bububaba

+0

@bububaba. Спасибо за уточнение. –

ответ

1

Если вы хотите удалить логику из представления, я бы предложил использовать помощники вида. Таким образом, вы можете абстрагировать логику 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(); 

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

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

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