【问题标题】:How to assemble an admin menu dynamically?如何动态组装管理菜单?
【发布时间】:2010-07-12 16:52:31
【问题描述】:

我正在尝试根据遍历每个页面上的每个对象的结果,找出动态组装我的管理应用程序导航菜单的最佳方法,这样只有具有可用对象的页面给用户显示在菜单中!

举个简单的例子,假设我有两种用户类型;秘书和经理。我有一个简单的管理页面来管理具有两个可以更新的字段的员工; “地址”和“出生日期”。通常,这两个字段都有一个访问级别,允许 SECRETARY 执行我们正常的 CRUD 操作。我们的管理员有一天来了,并决定“出生日期”需要 MANAGER 级别的访问权限——这很简单,可以在页面上隐藏该字段或将其设为只读。现在,突然之间,管理员决定“地址”字段也需要 MANAGER 级别的访问权限。鉴于此页面上没有可供 SECRETARY 用户使用的字段,我的菜单如何知道是否显示它(无需为菜单选项创建单独的规则)?

Zend 中的 ACL 和 Navigation 之类的东西似乎只是让菜单选项成为访问控制对象。这个:http://www.tonymarston.net/php-mysql/role-based-access-control.html#menu-system 似乎符合我的要求,但我找不到任何讨论这个特定主题的演示或代码块。

下一个问题是,如果我必须维护 db 中页面上所有对象的列表,为什么不在 db 中也包含 HTML,并让应用程序动态组装页面而不是使用视图 + 模板? (当然可以缓存)

有什么建议吗?

【问题讨论】:

    标签: php access-control


    【解决方案1】:

    粗略地说,在检查单个页面对象的权限后,我可以计算出有多少对象是有效的。如果该计数 = 0,那么我将省略该页面。

    没有适合你的代码,但这是我采用的方法的理论基础。

    【讨论】:

    • 谢谢安德鲁,这或多或少是我一直在玩的 - 构建一个多维数组,每个页面作为父节点,所有页面对象作为子节点 - 如果没有子节点,那么不显示页面。这样做是常见的做法吗?你知道任何包含这个的项目/框架吗?
    • 嗨,牛。抱歉,我没有资格回答您的两个问题中的任何一个,因为 PHP 是我的第一语言,而且我只用它编码了大约 7 个月。不过祝你的菜单好运!