0

我想使用基于 Zend_Acl 的 Zend_Navigation 进行导航,下面是我位于 /application/configs 目录中的一部分 navigation.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <nav>
        <menu1>
            <label>solidData</label>
            <uri>#</uri>
            <pages>
                <service>
                    <label>menuLabel1</label>
                    <controller>service</controller>
                    <action>index</action>
                    <resource>service</resource>
                    <privilege>index</privilege>
                </service>
                <attendance>
                    <label>menuLabel2</label>
                    <controller>attendance</controller>
                    <action>index</action>
                    <resource>attendance</resource>
                    <privilege>index</privilege>
                </attendance>
            </pages>
        </menu1>
        <menu2>
            <label>systemData</label>
            <uri>#</uri>
            <pages>
                <users>
                    <label>users</label>
                    <controller>users</controller>
                    <action>index</action>
                    <resource>users</resource>
                    <privilege>index</privilege>
                </users>
                <profile>
                    <label>profiles</label>
                    <controller>profile</controller>
                    <action>index</action>
                    <resource>profile</resource>
                    <privilege>index</privilege>
                </profile>
                <dictionary>
                    <label>dictionary</label>
                    <controller>dictionary</controller>
                    <action>index</action>
                    <resource>dictionary</resource>
                    <privilege>index</privilege>
                </dictionary>
                <language>
                    <label>languages</label>
                    <controller>language</controller>
                    <action>index</action>
                    <resource>language</resource>
                    <privilege>index</privilege>
                </language>
            </pages>
        </menu2>
    </nav>
</config>

我不想在 ACL 中显示所有页面都被拒绝的部分。

例如,如果有用户在 ACL 中对所有页面资源和权限都有 TYPE_DENY<menu1>我不想创建和显示标签“solidData”

主要问题是我的菜单结构,因为如您所见,我在一个菜单部分中有各种资源。

我已经尝试使用我自己的 Navigation 类扩展 Zend_Navigation 并使用函数isVisible()和“ isActive() ”,但我找不到解决方案。

我会很感激任何帮助

[编辑] 看看我的菜单的这个片段结构:

<menu2>
    <label>systemData</label>
    <uri>#</uri>
    <pages>
        <users>
            <label>users</label>
            <controller>users</controller>
            <action>index</action>
            <resource>users</resource>
            <privilege>index</privilege>
        </users>
        <profile>
            <label>profiles</label>
            <controller>profile</controller>
            <action>index</action>
            <resource>profile</resource>
            <privilege>index</privilege>
        </profile>
    </pages>
</menu2>

我不能<resource>因为<menu2>包含<menu2>具有不同资源 fe 'users' 和 'profile' 的页面。也许有可能将许多资源添加到一个菜单中。我尝试这样的事情:

<menu2>
    <label>systemData</label>
    <uri>#</uri>
    <resource>users</resource>
    <resource>profile</resource>
    <pages>
        ...
    </pages>
</menu2>

但我明白了

Invalid argument: $resource must be null, a string,  or an instance of Zend_Acl_Resource_Interface

编辑

好的,但是如果我更改菜单结构,我还必须更改 ACL。在我的 ACL 资源是控制器中,权限是控制器中的操作。

4

2 回答 2

1

我不确定我是否理解正确,但为什么您没有资源<menu1>并拒绝这些用户访问该资源,而不是或另外访问其他人?您可能必须更改 ACL 模式才能捕获此类事件,但不必更改导航。

更新 试试这个你的第二个问题:

<menu2>
    <label>systemData</label>
    <uri>#</uri>
    <resource>systemData</resource>
    <pages>
        ...
    </pages>
</menu2>

资源只是一个标识符,因此您不应该(不能)将两个资源添加到一个对象。您不必担心导航中的访问逻辑,而是提供信息供 ACL 使用。当然,您可以在 ACL 中添加更多逻辑,以便将权限分配给正确的资源。

于 2011-07-19T14:59:01.307 回答
0

即标记特权?也许?

       $this->allow($guest, array('login', 'register'), array('view', 'guest:login', 'guest:register'));
   $this->allow('user', array('logout', new Zfcms_Acl_Resource_News, 'content'), array('view', 'browse', 'latest', 'submit', 'save', 'editown', 'deleteown'));
   $this->allow('admin', array('admin:area'), array('admin:view', 'admin:edit', 'admin:delete', 'admin:summary'));
   $this->allow('admin');
   $this->deny($guest, new Zfcms_Acl_Resource_News, array('save'));
   /**
    * The below prevents logged users from seeing the login/register tabs
    */
   $this->deny(new Zfcms_Acl_Role_User(), null, array('guest:login', 'guest:register'));
于 2011-07-22T21:01:09.787 回答