0

Zend と PHP は初めてで、複数の内部アプリケーションを収容するポータル タイプのアプリケーションの作業を開始する準備をしています。すでに Zend_Auth をセットアップしており、Active Directory 経由でログインできるようになりました。

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

いくつかの調査の結果、Zend_Acl と Zend_Navigation を組み合わせるのが一般的であることがわかりましたが、これには問題がある場合があります。

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

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

4

1 に答える 1

1

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

コントローラーでは、使用するビューに ACL オブジェクトを渡す必要があります。

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

これにより、ロジックがうまく隠されている間、ビューがシンプルで読みやすくなります。理想的ではありませんが、あなたの状況では、これが私がとる道だと思います。

もちろん、ビュー ヘルパーは、パラメーターを渡すことで、これよりももう少し汎用的にすることができます。

于 2012-02-02T15:07:29.183 に答える