0

システム内のロールにリソースを付与するために ACL を使用しています。許可されたアクションは実行され、拒否されたアクションはカスタム ページにルーティングされます。ACL のリソースを使用して、実行時にメニュー要素を表示および非表示にしたいと考えています。ビューのアンカー、ボタンを非表示にします。

私はヘルパークラスを作ります

  class Zend_View_Helper_Permission extends Zend_View_Helper_Abstract
  {
   private $_acl;
    public function hasAccess($role, $action, $controller)
    {
      if (!$this->_acl) {

           $this->_acl = Zend_Registry::get("Acl");
    }

     return $this->_acl->isAllowed($role, $controller, $action);
  }
} 

このようにconfig.iniファイルでビューヘルパーを定義します

resources.view.helperPath.Zend_View_Helper = APPLICATION_PATH "/modules/privileges/views/helpers"

このヘルパーを使用して実行時にビューを作成するにはどうすればよいですか?

4

1 に答える 1

1

メソッド名はクラス名と一致する必要があるため、hasAccessではなくpermissionにする必要があります。

私自身、ビューヘルパーを使用する代わりに、グローバルメソッドshow()を使用しています

    function show($action = null)
    {

        $request = Zend_Controller_Front::getInstance()->getRequest();
        $action = $action === null ? $request->getActionName() : $action;
        $module = $request->getModuleName();
        $controller = $request->getControllerName();

        if(!Zend_Registry::isRegistered('acl')) throw new Exception('Show function can only be called inside view after preDispatch');

        $acl = Zend_Registry::get('acl');
$resource = $module . '#' . $controller;
        return $acl->isAllowed(Zend_Auth::getInstance()->getIdentity(),$resource,$action);
    }

簡単にするために、リクエストオブジェクトからコントローラー、モジュール名を取得します。リストアクションビューで編集アクションリンクを非表示にするには、単にdoo

次のようにlist.phtmlコード

<h2>Listing page Only superadmin can see edit link</h2>
<?php if(show('edit')): ?>
<a href="<?echo $this->url(array('action'=>'edit')) ?>">Edit</a>
<?php endif;?>

アップデート

グローバル関数showは、public/index.php内にロードされたlibrary/Util.php内で定義されました。

require_once 'Zend/Application.php';
require_once 'Util.php';
于 2012-05-27T09:53:14.007 に答える