链接、表单和 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 和外观操作的主要内容,如果未能解决你的问题,请参考以下文章