【发布时间】:2011-05-20 20:50:27
【问题描述】:
我知道如何使用 Zend_Acl 来允许某些用户组使用某些资源,但是我如何使用它来只显示页面的特定部分?例如
我在页面上有一个通过 AJAX 删除帖子的按钮,但我只想向管理员显示该按钮。我可以使用 Zend_Acl 来阻止对控制器发布/删除的访问,但我不能使用它来阻止按钮显示。
【问题讨论】:
标签: ajax zend-framework zend-acl
我知道如何使用 Zend_Acl 来允许某些用户组使用某些资源,但是我如何使用它来只显示页面的特定部分?例如
我在页面上有一个通过 AJAX 删除帖子的按钮,但我只想向管理员显示该按钮。我可以使用 Zend_Acl 来阻止对控制器发布/删除的访问,但我不能使用它来阻止按钮显示。
【问题讨论】:
标签: ajax zend-framework zend-acl
// in controller
$this->view->allow_delete_post = $acl->isAllowed($role, 'delete_post');
.
// in template
<? if ($this->allow_delete_post): ?>[button html]<? endif; ?>
这样不行吗?
【讨论】:
您还可以编写一个自定义静态 ACL 类,然后您可以直接从您的视图脚本中调用它。
由于 ACL 通常在插件级别处理,这意味着如果您的访问者正在查看视图,则 ACL 已经允许该资源,因此您现在可以在您的视图中执行类似的操作...
if(My_Custom_Acl::getIsAllowed('some_resource', 'delete_post_action'){我没有在自定义 getIsAllowed() 方法中指定角色名称,因为此时 ACL 已经假设知道用户的身份和角色。
希望对你有帮助
【讨论】:
虽然 Christof 给出了一个很好的解决方案,但另一种方法是拆分视图。虽然这开始违反 DRY,但当您有大约 200 个不同的管理事物/控件时,它在视图中变得越来越重 - 因此使用 $this->render('view') 和 $this->render('edit' 拆分视图) 从控制器获得权限有时更容易。然后只有编辑视图脚本有编辑链接。但同样,它是干燥的,所以不是最佳的,而是一种替代方案。我想你必须权衡一下,哪个更干燥,重复 ACL 检查或 2 个视图中的东西......
【讨论】: