Не удалось создать навигацию на основе Zend_Acl - PullRequest
0 голосов
/ 04 июля 2011

Я пытаюсь научиться создавать навигацию с Zend_Acl.Но навигация отображается только для администратора и больше ни для кого.

Я прочитал свой код и попытался отследить код, который поставляется с ZendFramework.Но я застрял и не могу понять, что я делаю неправильно.

Вот мой класс acl:

class Application_Model_LibraryACL extends Zend_Acl
{
    public function __construct()
    { 
            $this->add(new Zend_Acl_Resource( 'guestbook' ) );
            $this->add( new Zend_Acl_Resource( 'index' ) );

            $this->add(new Zend_Acl_Resource( 'error' ) );
            $this->add(new Zend_Acl_Resource( 'authentication' ) );
            $this->add(new Zend_Acl_Resource( 'login' ), 'authentication' );
            $this->add(new Zend_Acl_Resource( 'logout' ), 'authentication' );

            $this->addRole( new Zend_Acl_Role( 'guest' ) );
            $this->addRole( new Zend_Acl_Role( 'member' ), 'guest' );
            $this->addRole( new Zend_Acl_Role( 'admin' ), 'member' );

            $this->allow( 'guest', 'error', 'error' );
            $this->allow( 'guest', 'index', 'index' );
            $this->allow( 'guest', 'authentication', array( 'login', 'logout' ) );
            $this->allow( 'member', 'guestbook', 'sign' );
            $this->allow( 'admin' );
    } 
}

Вот XML-файл, который определяет навигацию:

<?xml version="1.0" encoding="utf-8"?>
<config>
    <nav>
            <home>
                    <label>Home</label>
                    <controller>index</controller>
                    <action>index</action>
                    <resource>index</resource>
            </home>

            <logout>
                    <label>Logout</label>
                    <controller>authentication</controller>
                    <action>logout</action>
                    <resource>logout</resource>
            </logout>

            <login>
                    <label>Login</label>
                    <controller>authentication</controller>
                    <action>login</action>
                    <resource>login</resource>
            </login>

            <guestbook>
                    <label>Guestbook</label>
                    <resource>guestbook</resource>
                    <uri></uri>
                    <pages>
                            <list>
                                    <label>List</label>
                                    <controller>guestbook</controller>
                                    <action>index</action>
                                    <resource>guestbook</resource>
                            </list>
                            <sign>
                                    <label>Sign</label>
                                    <controller>guestbook</controller>
                                    <action>sign</action>
                                    <resource>guestbook</resource>
                            </sign>
                    </pages>
            </guestbook>


    </nav>

А вот код в файле начальной загрузки, который устанавливает навигацию:

$navContainerConfig = new Zend_Config_Xml( APPLICATION_PATH . '/configs/navigation.xml', 'nav' );
$navContainer = new Zend_Navigation( $navContainerConfig );
$view->navigation( $navContainer )->setAcl( $this->acl )->setRole( Zend_Registry::get( 'role' ) );

$ this-> acl содержит объект acl, а реестр zend содержитроль вошедшего в систему пользователя.

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

1 Ответ

0 голосов
/ 05 июля 2011

То, что я вижу и волную меня, - это две вещи.

Первый - это ресурс "guestbook", который используется три раза.Я не думаю, что это ваша проблема, но вы должны это исправить.

Во-вторых, и ваша проблема, третий аргумент в allow - это $ Привилегии.Я не уверен в том, что говорю сейчас, но навигация не требует привилегий.Хотя, скорее всего, это не те, которые вы предоставили.

Итак, попробуйте просто так:

$this->allow( 'guest', 'error' );
$this->allow( 'guest', 'index' );
$this->allow( 'guest', 'authentication');
$this->allow( 'member', 'guestbook' );
$this->allow( 'admin' );
...