Я пытаюсь создать интерфейсное и внутреннее меню навигации.
Я хочу отображать только фоновое меню в фоновом режиме и наоборот.
Это работает правильно, когда я отключил ACL. Но когда я надеваю, меню исчезло.
Кто-нибудь знает, как я могу решить это?
Это мой код:
EDIT:
Я изменил файл navigation.xml, и теперь он работает почти правильно.
Элементы верхнего меню работают, когда я разрешаю контроллер.
Но когда я хочу разрешить только определенное действие внутри контроллера, вместо разрешенного действия отображается все подменю.
Надеюсь, вы понимаете проблему. Извините, мой английский не очень хорошо.
в bootstrap.php
protected function _initNavigation()
{
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$identity = $this->_auth->getStorage()->read();
if($identity)
{
$roles = new Application_Model_Auth_Roles();
$role = $roles->getRoles($identity->role);
} else {
$role[0]['role'] = 'Guest';
}
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$container = new Zend_Navigation($config);
$view->navigation($container)
->setAcl($this->_acl)
->setRole($role[0]['role']);
// default menu
$view->nav = $view->navigation()->findOneByLabel('mainnav');
}
CmsControllor.php
class CmsController extends Zend_Controller_Action
{
public function init()
{
//// BUILD MENU
$this->view->nav = $this->view->navigation()->findOneByLabel('cms');
...
вид:
<?= $this->navigation()->menu()->renderMenu($this->nav); ?>
navigation.xml
<config>
<nav>
<mainnav>
<label>mainnav</label>
<module>default</module>
<pages>
<home>
<label>Home</label>
<controller>index</controller>
<resource>index</resource>
</home>
<page1>
<label>De Esdoorn</label>
<controller>page1</controller>
<resource>deesdoorn</resource>
</page1>
<page2>
<label>page2</label>
<controller>page2</controller>
<pages>
<algemeen>
<label>Algemeen</label>
<controller>page2</controller>
<action>index</action>
<resource>page2</resource>
<privileges>index</privileges>
</algemeen>
<biedt>
<label>page2 biedt</label>
<controller>page2</controller>
<action>biedt</action>
<privileges>biedt</privileges>
</biedt>
<zorg>
<label>Zorg</label>
<controller>page2</controller>
<action>zorg</action>
<privileges>zorg</privileges>
</zorg>
<download>
<label>Download onze folder</label>
<uri>folder url</uri>
<target>_blank</target>
</download>
</pages>
</page2>
<organisatie>
<label>Onze organisatie</label>
<controller>organisatie</controller>
<pages>
<algemeen>
<label>Algemeen</label>
<controller>organisatie</controller>
<resource>organisatie</resource>
<privileges>index</privileges>
</algemeen>
<missieenvisie>
<label>Missie en visie</label>
<controller>organisatie</controller>
<action>missieenvisie</action>
<privileges>missieenvisie</privileges>
</missieenvisie>
<dienstverlening>
<label>Dienstverlening</label>
<controller>organisatie</controller>
<action>dienstverlening</action>
<privileges>dienstverlening</privileges>
</dienstverlening>
<kosten>
<label>Kosten</label>
<controller>organisatie</controller>
<action>kosten</action>
<privileges>kosten</privileges>
</kosten>
<nieuws>
<label>Nieuws</label>
<controller>organisatie</controller>
<action>nieuws</action>
<privileges>nieuws</privileges>
</nieuws>
</pages>
</organisatie>
<contact>
<label>Contact</label>
<controller>contact</controller>
<resource>contact</resource>
</contact>
</pages>
</mainnav>
<cms>
<label>cms</label>
<module>default</module>
<pages>
<dashboard>
<label>Dashboard</label>
<controller>cms</controller>
<action>dashboard</action>
<resource>cms</resource>
<privileges>nieuws</privileges>
</dashboard>
<nieuwsbeheren>
<label>Beheer uw nieuws</label>
<controller>cms</controller>
<action>managenews</action>
<resource>cms</resource>
</nieuwsbeheren>
<fotoalbum>
<label>Foto album</label>
<controller>fotoalbum</controller>
<pages>
<index>
<label>Album overzicht</label>
<controller>fotoalbum</controller>
<privileges>index</privileges>
</index>
<add>
<label>+ Album toevoegen</label>
<controller>fotoalbum</controller>
<action>add</action>
<resource>fotoalbum</resource>
<privileges>add</privileges>
</add>
<clientoverview>
<label>Bewoner overzicht</label>
<controller>fotoalbum</controller>
<action>clientoverview</action>
<privileges>clientoverview</privileges>
</clientoverview>
<useroverview>
<label>Naaste overzicht</label>
<controller>fotoalbum</controller>
<action>useroverview</action>
<privileges>useroverview</privileges>
</useroverview>
</pages>
</fotoalbum>
<settings>
<label>Instellingen</label>
<controller>cms</controller>
<action>settings</action>
<resource>cms</resource>
<privilege>settings</privilege>
</settings>
<logout>
<label>Uitloggen</label>
<controller>cms</controller>
<action>logout</action>
<resource>cms</resource>
<privilege>logout</privilege>
</logout>
</pages>
</cms>
</nav>
</config>
Мой плагин ACL:
class My_Plugins_CheckAccess extends Zend_Controller_Plugin_Abstract
{
private $_acl = NULL;
private $_auth = NULL;
public function __construct(Zend_Acl $acl, Zend_Auth $auth)
{
$this->_acl = $acl;
$this->_auth = $auth;
}
public function preDispatch(Zend_Controller_Request_Abstract $request){
$controller = $request->getControllerName();
$action = $request->getActionName();
$identity = $this->_auth->getStorage()->read();
if($identity)
{
$roles = new Application_Model_Auth_Roles();
$role = $roles->getRoles($identity->role);
} else {
$role[0]['role'] = 'Guest';
}
if(!$this->_acl->isAllowed($role[0]['role'],$controller,$action))
{
$request->setControllername('login')->setActionName('index');
} else
{
}
}
Файл моих правил (правила взяты из базы данных)
class Application_Model_Auth_CmsAcl extends Zend_Acl {
public function __construct(){
$logic = new Application_Model_Auth_Logic();
$pages = new Application_Model_Auth_Pages();
$pagecollection = $pages->getPages();
$pagelist = $logic->listPages($pagecollection);
$roles = new Application_Model_Auth_Roles();
$rolecollection = $roles->getRoles();
$resources = new Application_Model_Auth_Resources();
$resourcecollection = $resources->getResource();
foreach($pagelist as $controller)
{
if($controller['controllerBase'] == 1):
$this->add( new Zend_Acl_Resource($controller['controller']));
endif;
}
foreach($rolecollection as $role)
{
$this->addRole( new Zend_Acl_Role($role['role']));
}
foreach($resourcecollection as $resource)
{
$roleName = $roles->getRoles($resource['roleID']);
$pageName = $pages->getPages($resource['pageID']);
if($pageName[0]['action'] != ''){
$this->allow($roleName[0]['role'],$pageName[0]['controller'],$pageName[0]['action']);
} else {$this->allow($roleName[0]['role'],$pageName[0]['controller']);}
}
}
}
Это мой первый веб-сайт Zend. Пожалуйста, поправьте меня, когда я делаю ошибки.