我想将我的ACL插件加载到应用程序,然后开始使用ACL
我按照tutorial 开始学习ACL。
我这样做
class My_ACL extends Zend_Acl {
public function __construct() {
$this->addRole(new Zend_Acl_Role('member'));
$this->addRole(new Zend_Acl_Role('admin'));
//discussions is a module name
$this->add(new Zend_Acl_Resource('discussions'));
//privileges is a module name
$this->add(new Zend_Acl_Resource('privileges'));
//default is a the default mdule
$this->add(new Zend_Acl_Resource('default'));
//allow admin every thing
$this->allow('admin');
//tmp just for testing
$this->allow('member');
}
并在插件中删除所有内容并保留一个echo语句
class Application_Plugin_Acl extends Zend_Controller_Plugin_Abstract {
private $_acl = null;
public function __construct() {
$this->_acl = new My_ACL();
}
public function preDispatch(Zend_Controller_Request_Abstract $request) {
$role = (Zend_Auth::getInstance()->hasIdentity()) ? 'admin' : 'member';
echo $this->_acl->isAllowed($role, $request->getModuleName() . ':' . $request->getControllerName() . ':' . $request->getActionName());
}
但是当我尝试访问系统的任何网址时会发生此错误
Fatal error: Uncaught exception 'Zend_Acl_Exception' with message 'Resource 'default:error:error' not found' in
D:\ZendFramework\library\Zend\Controller\Plugin\Broker.php on line 312
( ! ) Zend_Acl_Exception: Resource 'default:error:error' not found in D:\ZendFramework\library\Zend\Acl.php on line 365
}
答案 0 :(得分:0)
添加此行
if($request->getControllerName() == 'error') return ;
后
$role = (Zend_Auth::getInstance()->hasIdentity()) ? 'admin' : 'member';
基本上每当发生应用程序错误时,ZF都会将请求对象更改为模块缺省值,错误控制器及其错误操作。对于这种情况,您还没有创建任何资源。 通过我所说的,您将能够看到“应用程序错误”页面,它将帮助您解决第一个问题。