0

My ACL プラグインをアプリケーションにロードして、ACL の操作を開始したい

このチュートリアルに従って、 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');

}

プラグインでは、すべてのものを削除し、エコーステートメントを保持します

 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());

}

しかし、システムの任意の URL にアクセスしようとすると、このエラーが発生します

  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

}

4

1 に答える 1

0

この行を追加

if($request->getControllerName() == 'error')  return ;

  $role = (Zend_Auth::getInstance()->hasIdentity()) ? 'admin' : 'member';

基本的に、アプリケーション エラーが発生するたびに、ZF はリクエスト オブジェクトをモジュールのデフォルト、エラー コントローラ、およびそのエラー アクションに変更します。その場合、リソースを作成していません。私が言ったことを実行すると、最初の問題を解決するのに役立つ「アプリケーション エラー」ページが表示されます。

于 2012-04-11T09:01:04.570 に答える