在Zend_Acl中定义如何处理'guest'用户的问题

时间:2011-06-07 18:04:42

标签: zend-framework zend-auth zend-acl

我在'来宾'用户可用的每个视图上收到以下错误:

  

注意:尝试在第35行的/home/fiodorovich/public_html/gisele/library/Federico/Plugin/Acl.php中获取非对象的属性

它所指的行是'$ role = $ this-> _auth-> getStorage() - > read() - > role;'在:

public function preDispatch (Zend_Controller_Request_Abstract $request)
{
    $role = $this->_auth->getStorage()->read()->role;

    if($role === null) {
        $role = self::DEFAULT_ROLE;
    }
    $action = $request->getActionName();
    $controller = $request->getControllerName();
    if($this->_acl->has($controller)) {
        if(!$this->_acl->isAllowed($role, $controller, $action)) {
            $request->setActionName('error');
            $request->setControllerName('error');
        }
    }
}

我知道这只是一个通知,并且它将不会在生产中显示,因为错误将被禁用...但是这有点让我烦恼。那么我怎么能解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

在从存储请求数据之前使用$this->_auth->hasIdentity()

if ($this->_auth->hasIdentity()) {
    // user is logged in and we can get role
    $role = $this->_auth->getStorage()->read()->role;  
} else {
    // guest
    $role = self::DEFAULT_ROLE;
}