2012-02-02 11 views
0

私はZendとPHPには新しく、複数の内部アプリケーションを格納するポータル型アプリケーションの作業を開始する準備が整いました。私は既にZend_Authをセットアップして、Active Directory経由でログインできるようになりました。ユーザロールに基づいてZendビューの要素を表示/非表示にしますか?

Zend_Aclを使用してリソースを設定する方法について説明しましたが、ポータル内のアプリケーションごとに1つずつ設定します。表面上でZend_Aclは、私たちがリソースへの承認と階層アクセスに必要なものを処理するようです。

私はいくつかの調査の後、Zend_AclとZend_Navigationを組み合わせるのが一般的だと判明しましたが、これには時々問題があります。

フロントコントローラプラグインを利用して各リクエストのリソースアクセス/特権をチェックする代わりに、ビュー(HTML)に表示されている要素をユーザーに制御するということが要求されています。たとえば、ユーザー 'Bob'がブログアプリケーションにアクセスできない場合、BobはそのユーザーのナビメニューにBobを表示させたくありません。

このロジックをすべて紹介し、ビューのチェックが間違っている場合は、私は彼らができるだけ愚かであるべきだと思う。これを処理するより良い方法はありますか?ビューコード内のユーザー役割に基づいて条件付きで要素を表示または非表示にすることは間違っています。

+2

似たような質問があります:http://stackoverflow.com/questions/8907820/acl-and-appearance-manipulation-of-links-forms-and-dom-elementsまた、フロントコントローラープラグインを利用する代わりに "フロントコントローラープラグインを利用することを除いて"と書いていた;) – bububaba

+0

@bububaba確かに。説明をありがとうございます。 –

答えて

1

ビューからロジックを削除する場合は、ビューヘルパーを使用することをお勧めします。そうすれば、ビューから離れたACLロジックを抽象化することができます。

あなたが使用するためのビューにACLオブジェクトを渡す必要があるでしょう、あなたのcontrolerで

: -

$this->view->acl = $acl;//instance of Zend_Acl 

その後、あなたには、いくつかの要素をレンダリングするためのビューヘルパーを持っている: -

class Zend_View_Helper_SomeElement extends Zend_View_Helper_Abstract 
{ 
    public function someElement() 
    { 
     $html = ''; 
     if($this->view->acl->isAllowed('guest', null, 'view'){ 
      $html .= "<div>Top secret content</div>\n"; 
     } 
     return $html; 
    } 
} 

次に、あなたの表示は次のように簡単です: -

echo $this->someElement(); 

きれいに隠されています。理想的ではありませんが、あなたの状況では、私はこれが私が取るルートだと思います。

あなたのビューヘルパーは、もちろん、パラメータを渡すことによって、これより少し一般的な目的にすることができます。

関連する問題