Справочная информация:Zend: ACL логика Помощники
Я в моем admin
модуле, и я создал помощник вида в modules/admin/views/helpers/AdminPanel.php
. У меня есть плагин макета, который заставляет мое представление использовать макет в admin/views/layouts/default.phtml
.
Я пытаюсь получить доступ к объекту ACL, чтобы определить, есть ли у пользователя ресурсы в контексте помощника вида, а затем определить, следует ли возвращать html панели администратора, анализируя configs/admin-nav.xml или вообще ничего не вернуть.
Я звоню это в моем макете админ так:
<?php echo $this->AdminPanel(); ?>
и класс код, который является пустым, что мне нужно, чтобы получить доступ к объекту аКЛ в:
class My_View_Helper_AdminPanel extends Zend_View_Helper_Abstract {
public function AdminPanel() {}
}
Я попытался это:
$acl = Zend_Controller_Action_HelperBroker::getStaticHelper('acl');
Но это, вероятно, не то, что я ищу, как это заставляет по умолчанию модуля views/layouts/default.phtml
для загрузки и ошибок.
Вот мой глобальный загрузочный файл:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
private $_acl = null;
private $_auth = null;
protected function _initDoctype() {
$this->bootstrap('view');
$view = $this->getResource('view');
$view->setEncoding('UTF-8');
$view->doctype('HTML4_STRICT');
}
protected function _initAutoload() {
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('KG_');
$resourceLoader = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => APPLICATION_PATH,
'namespace' => '',
'resourceTypes' => array(
'form' => array(
'path' => 'forms/',
'namespace' => 'Form_'
),
'model' => array(
'path' => 'models/',
'namespace' => 'Model_'
)
)
));
return $autoloader;
}
protected function _initAclAuth() {
$this->_acl = new Model_Acl;
$this->_auth = Zend_Auth::getInstance();
}
protected function _initNav() {
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/nav.xml', 'mainNav');
$navigation = new Zend_Navigation($config);
$fc = Zend_Controller_Front::getInstance();
$fc->registerPlugin(new KG_Controller_Plugin_Acl($this->_acl, $this->_auth));
$role = $this->_auth->getStorage()->read()->role;
if (!$role) {
$role = 'guest';
}
$view->navigation($navigation)->setAcl($this->_acl)->setRole($role);
}
protected function _initEncoding() {
$fc = Zend_Controller_Front::getInstance();
$response = new Zend_Controller_Response_Http;
$response->setHeader('Content-Type','text/html;charset=utf-8', true);
$fc->setResponse($response);
}
}
Я уже делаю это, потому что, если пользователь получает доступ к '/ администратору/index' и он Безразлично» t иметь доступ, не разрешен, затем он перенаправляется на '/ admin/login', который использует файл макета' default.phtml' модуля администратора. Я хотел бы иметь только один файл макета для администратора ..., который содержит эхо для adminPanel .. У меня сложилось впечатление, что это правильный способ делать что-то .. оставляя эхо для помощника вида там и делай acl логика в нем .. что, если, например, есть несколько регионов/просмотр помощников, которым нужны разные уровни доступа? будет ли отдельный макет для каждого? –