【问题标题】:Zend Navigation privileges without Zend ACL's没有 Zend ACL 的 Zend Navigation 权限
【发布时间】:2013-04-02 20:28:15
【问题描述】:

好的,我有一个生成如下 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

【问题讨论】:

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


    【解决方案1】:

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

    这里你可以看到如何使用自定义菜单部分https://stackoverflow.com/a/1255289/760866

    您可以像这样读取自定义 xml 属性:

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

    希望有帮助!

    【讨论】:

    • 嗯,我在 Zend_Registry 上有它们。我稍后会尝试。 =)
    • 只是一个问题:对于每个页面,我需要将其权限与当前用户权限进行比较?
    • 是的,您阅读了每个页面的权限属性,然后与当前用户角色进行比较。如果它与您的generete 菜单链接相匹配,否则您只需“继续;”循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    相关资源
    最近更新 更多