链接、表单和 DOM 元素的 ACL 和外观操作

Posted

技术标签:

【中文标题】链接、表单和 DOM 元素的 ACL 和外观操作【英文标题】:ACL and appearance manipulation of links, forms and DOM elements 【发布时间】:2012-02-13 00:51:30 【问题描述】:

我想了解哪种策略最适合多模块应用程序(管理、默认等)顶层的链接、表单和 DOM 元素外观操作(显示/隐藏)??

它应该通过ACL来完成,它的用法我很清楚,权限存储在数据库中。 如果有人试图访问不允许他访问的某个页面(模块/控制器/操作),则会传递一个信息页面,说明他不被允许。在这种情况下,所有元素都是可见的。

我想到了一些元素外观操作的策略:

    在控制器中设置

    $this->view->allow_delete_link = $acl->isAllowed($role, 'delete_post'); // boolean
    

    并在视图文件中询问它是真还是假并显示/隐藏

    <?php if ($this->allow_delete_link): ?>[link html] <?php endif; ?>
    

    这里的缺点是如果我在页面上有 50 个链接,我将需要在我的控制器中有 50 行代码,而我不喜欢这样做。

    类似于第一个,除了 ACL 是静态类,因此查看文件询问是否:

    <?php if(My_Custom_Acl::getIsAllowed('some_resource', 'delete_post_action') echo 'link';  ?>
    

    要创建一个视图助手,我将在创建每个链接时调用它,我会在其中询问已登录的用户是否有权访问,如果是,则返回整个链接,如果没有,则返回“”或 false。 视图助手非常慢,所以这是我最后的手段。

    为每组用户创建单独的 view.phtml 文件,然后在用户登录的控制器中显示适当的视图。 $this->render('xx_view'); 这违反了DRYS,所以我觉得这个方法不好。

对于这样的事情还有其他策略吗,因为我已经看到,如果我选择这 4 个中的任何一个,我都会头疼。 也许一些现有的插件/类会是最好的?

提前致谢!

我忘了说,我正在使用 Zend 框架和 Zend_Acl。

【问题讨论】:

【参考方案1】:

3 是最好的解决方案,因为您经常需要将数据库行传递给 isAllowed 调用(例如,如果您需要测试帖子的所有者来选择是否可以显示删除链接)。

您不能像在 1 中建议的那样在控制器中执行此操作,因为每行需要一行。

2 很丑。

您可以通过扩展 Zend_View:http://framework.zend.com/manual/fr/performance.view.html 来加快视图助手的解析速度。

【讨论】:

我不得不接受这个解决方案,因为它比另一个更好。谢谢你的回答。

以上是关于链接、表单和 DOM 元素的 ACL 和外观操作的主要内容,如果未能解决你的问题,请参考以下文章

DOM

JavaScript&jQuery.DOM事件

DOM操作元素

jquery的应用和JS的区别

jQuery - 如何将 DOM 元素和 Javascript 对象链接在一起?

求教:jquery如何操作隐藏的DOM元素