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