0

私は CMS のようなサイトを構築しています。多くの管理者ユーザーがいます。ACL はビジネス レイヤーに配置されました。しかし今、管理者ユーザーが属する都市に基づいてモデルにカスタム ACL ロジックを適用したいと考えています。

例: 管理者ユーザーはニューヨーク出身です。彼はニューヨーク市に関連するコンテンツを表示できます。

モデルで Zend_Db_Select を使用して構築されたクエリが多数あります。今、私はどこでもクエリを変更しました。方法はありますか、すべてのクエリにロジック ->where('u.city_id = ?', $admin_user_city_id) を追加できます。

前もって感謝します。

ありがとう

4

1 に答える 1

2

拡張する必要はないかもしれないと思いますZend_Db_Table_Select。すべてのモデルも拡張するZend_Db_Table_Abstractで拡張するだけで、探していることができます。その抽象クラスでは、a を返すMy_Db_Table_Abstractデフォルトを拡張し、それを返す前に where 句を追加するだけです。select()Zend_Db_Table_Select

したがって、 select を呼び出すたび$myModel -> select()に、 where 句が既に含まれています。

abstract class My_Db_Table_Abstract extends Zend_Db_Table_Abstract
{
    public function select($withFromPart = self::SELECT_WITHOUT_FROM_PART)
    {
        $select = parent::select($withFromPart);
        # Retreive $admin_user_city_id
        $select -> where('u.city_id = ?', $admin_user_city_id);
        return $select;
    }
}

もちろん、これは、u使用しているモデルに応じて、どこかでテーブルに正しい結合を行ったことも意味します。

于 2011-09-18T13:16:00.747 に答える