如何在动作助手中获得$ acl-> isAllowed?

时间:2013-12-18 08:47:11

标签: php function zend-framework frameworks helper

我正在尝试创建一个用于创建菜单的动作帮助器。 但我不知道为什么它不知道函数isAllowed。我收到以下错误消息:

在非对象上调用成员函数isAllowed()

<?php
class Zend_Controller_Action_Helper_Menu extends Zend_Controller_Action_Helper_Abstract
{
    private $_acl;
    public function createSubMenu($request,$identity){
        $controller = $request->getControllerName();
        $action = $request->getActionName();
        $identity = $identity->user_role;
        $access = $this->hasAccess($identity,$action,$controller);

        $return;

        $return .= "<ul>";
            $return .= "<li><a href=''>".$identity."</a></li>";
        $return .= "</ul>";

        return $access;
    }

    private function hasAccess($role, $action, $controller)
    {
        $this->_acl = new Zend_Acl();
        if (!$this->_acl) {
            $this->_acl = Zend_Controller_Front::getInstance()->getPlugin('Acl');
        }
        return $this->_acl->isAllowed($role, $controller, $action);
    }
}

1 个答案:

答案 0 :(得分:1)

我不是Zend专家,但是:

  • $this->_acl = new Zend_Acl(); - 这将创建没有设置任何角色的新ACL对象,因此它没用(也许你想以其他方式做到这一点 - 首先获取插件,如果没有创建新的?)
  • ->getPlugin('Acl'); - 您应该使用完整的插件类名称

我通常在插件中创建并启动ACL对象(在preDispatch上)并将其保存在Zend_Registry中,以便我以后可以使用Zend_Registry::get('Zend_Acl')->isAllowed($role, $resource, $privilege);

相关问题