【问题标题】:Zend_Acl For Specific Parts Of The PageZend_Acl 用于页面的特定部分
【发布时间】:2011-05-20 20:50:27
【问题描述】:

我知道如何使用 Zend_Acl 来允许某些用户组使用某些资源,但是我如何使用它来只显示页面的特定部分?例如

我在页面上有一个通过 AJAX 删除帖子的按钮,但我只想向管理员显示该按钮。我可以使用 Zend_Acl 来阻止对控制器发布/删除的访问,但我不能使用它来阻止按钮显示。

【问题讨论】:

    标签: ajax zend-framework zend-acl


    【解决方案1】:
    // in controller
    $this->view->allow_delete_post = $acl->isAllowed($role, 'delete_post');
    

    .

    // in template
    <? if ($this->allow_delete_post): ?>[button html]<? endif; ?>
    

    这样不行吗?

    【讨论】:

      【解决方案2】:

      您还可以编写一个自定义静态 ACL 类,然后您可以直接从您的视图脚本中调用它。

      由于 ACL 通常在插件级别处理,这意味着如果您的访问者正在查看视图,则 ACL 已经允许该资源,因此您现在可以在您的视图中执行类似的操作...

      if(My_Custom_Acl::getIsAllowed('some_resource', 'delete_post_action'){

      我没有在自定义 getIsAllowed() 方法中指定角色名称,因为此时 ACL 已经假设知道用户的身份和角色。

      希望对你有帮助

      【讨论】:

        【解决方案3】:

        虽然 Christof 给出了一个很好的解决方案,但另一种方法是拆分视图。虽然这开始违反 DRY,但当您有大约 200 个不同的管理事物/控件时,它在视图中变得越来越重 - 因此使用 $this->render('view') 和 $this->render('edit' 拆分视图) 从控制器获得权限有时更容易。然后只有编辑视图脚本有编辑链接。但同样,它是干燥的,所以不是最佳的,而是一种替代方案。我想你必须权衡一下,哪个更干燥,重复 ACL 检查或 2 个视图中的东西......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-12-26
          • 2013-01-03
          • 1970-01-01
          • 2011-03-17
          • 2016-06-15
          • 2020-10-30
          • 2018-10-16
          相关资源
          最近更新 更多