0

我是 Zend 和 PHP 的新手,我正准备着手开发一个门户类型的应用程序,该应用程序将容纳多个内部应用程序。我已经设置了 Zend_Auth,现在可以通过 Active Directory 登录。

我们一直在讨论使用 Zend_Acl 设置资源,为门户中的每个应用程序设置一个资源。从表面上看,Zend_Acl 似乎可以处理我们需要的授权和对资源的分层访问。

经过一些研究,我发现将 Zend_Acl 与 Zend_Navigation 结合起来很常见,但有时会出现问题。

所要求的是,除了*使用前端控制器插件来检查每个请求的资源访问/权限之外,我们还可以控制视图 (HTML) 中显示给用户的元素。例如,如果用户“Bob”没有访问博客应用程序的权限,我们不希望 Bob 在他的导航菜单上看到它。

对我来说,引入所有这些逻辑以及是否在视图中检查是错误的;我认为他们应该尽可能保持愚蠢。有没有更好的方法来处理这个?根据您的视图代码中的用户角色有条件地显示或隐藏元素对我来说感觉不对。

4

1 回答 1

1

如果您想从视图中删除逻辑,我建议使用视图助手。这样您就可以将 ACL 逻辑从视图中抽象出来。

在您的控制器中,您需要将 ACL 对象传递给视图以供使用:-

$this->view->acl = $acl;//instance of Zend_Acl

然后你有一个视图助手来渲染一些元素: -

class Zend_View_Helper_SomeElement extends Zend_View_Helper_Abstract
{
    public function someElement()
    {
        $html = '';
        if($this->view->acl->isAllowed('guest', null, 'view'){
           $html .= "<div>Top secret content</div>\n";
        }
        return $html;
    }
}

那么你的观点很简单: -

echo $this->someElement();

这样可以使您的视图简单易读,同时很好地隐藏您的逻辑。不理想,但在你的情况下,我认为这是我会采取的路线。

当然,您的视图助手可以通过传入参数来实现比这更通用的目的。

于 2012-02-02T15:07:29.183 回答