我知道如何使用 Zend_Acl 允许某些用户组使用某些资源,但我如何使用它来只显示页面的特定部分?例如
我在页面上有一个通过 AJAX 删除帖子的按钮,但我只想向管理员显示该按钮。我可以使用 Zend_Acl 来阻止对控制器发布/删除的访问,但我不能使用它来阻止按钮显示。
我知道如何使用 Zend_Acl 允许某些用户组使用某些资源,但我如何使用它来只显示页面的特定部分?例如
我在页面上有一个通过 AJAX 删除帖子的按钮,但我只想向管理员显示该按钮。我可以使用 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 个视图中的东西......