没有Zend ACL的Zend Navigation权限

时间:2013-04-02 20:28:15

标签: php zend-framework acl zend-navigation zend-acl

好的,我有一个生成xml文件的代码,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
    <nav>
        <main>
            <label>Home</label>
            <alias>main</alias>
            <uri>/</uri>
            <privilege>
                <super_admin>super_admin</super_admin>
                <reg_user>reg_user</reg_user>
            </privilege>
            <status>active</status>
            <sprite>sprite.png</sprite>
            <pages>
                <article>
                    <label>Article</label>
                    <alias>article</alias>
                    <uri>/article</uri>
                    <privilege>
                        <super_admin>super_admin</super_admin>
                        <reg_user>reg_user</reg_user>
                    </privilege>
                    <status>active</status>
                    <pages>
                        <insert>
                            <label>Insert</label>
                            <alias>insert</alias>
                            <uri>/article/insert</uri>
                            <privilege>
                                <super_admin>super_admin</super_admin>
                            </privilege>
                            <status>active</status>
                        </insert>
                        [...]
                    </pages>
                </article>
                [...]
            </pages>
        </main>
    </nav>
</configdata>

我的问题是我的URI不是Zend Acl的形式,因为我跟着this link帮助我获取所有URI,管理每个组的权限(在上面的代码中命名为super_admin和reg_user) )并将它们保存在数据库中。

现在的问题是,我想渲染一个菜单,其中只包含可访问特定组的特定项目。这意味着,使用上面的XML,如果我输入 super_admin ,我会有一个这样的菜单:

- Home
    - Article
        - Insert

如果我输入 reg_user ,我的菜单应为:

- Home
    - Article

我该怎么做?

我正在使用Zend Framework 1.11.x

1 个答案:

答案 0 :(得分:2)

如果你想在没有Zend ACL的情况下这样做,我建议你自己编写部分菜单。 然后使用xml文件中的菜单项权限检查当前用户角色(可能存储在Zend_Registry中)。

您可以在此处查看如何使用自定义菜单partial https://stackoverflow.com/a/1255289/760866

您可以阅读以下自定义xml属性:

$properties = new Zend_Config($page->GetCustomProperties());
$privilege = $properties->privilege;

希望有所帮助!