2011-09-17 12 views
0

私はサイトのCMSの種類を構築しています、そこには多くの管理者がいます。 ACLがビジネス層のために設置されました。しかし今、私たちは、adminユーザーが所属する都市に基づくモデルにカスタムACLロジックを適用したいと考えています。zend dbを選択

例: 管理者はニューヨークからです。彼はニューヨーク市に関連するコンテンツを見ることができます。

私はモデル内でZend_Db_Selectを使ってたくさんのクエリを構築しています。今私はどこでもクエリを変更しました。方法はありますか?私は論理を追加できます - >(どこにも 'u.city_id =?'、$ admin_user_city_id) それぞれのクエリがあります。

ありがとうございます。

おかげ VENU

答えて

2

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

したがって、で選択を呼び出すたびに、すでにwhere句が含まれています。また、あなたは正しいがどこかあなたがにしているモデルに応じて、あなたのuテーブルに参加してきたことを意味もちろん

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; 
    } 
} 

+0

dbアダプタでselect objectを呼び出す場合はどうすればよいですか?私はそれがうまくいかないと思う。だから、私はZend_Db_Selectを拡張したいと考えました。 – Venu

+0

私には、DBアダプタは実際にビジネスコードの場所ではありません。とにかくもしあなたが行きたいのであれば、今使っているアダプタに応じて 'Zend_Db_Adapter_Abstract'や' Zend_Db_Adapter_Mysqli'を拡張した独自のアダプタを作ることができます。次に、私の答えで 'select()'メソッドを拡張して説明したのと同じことをします。 – jhuet

+0

'Zend_Db_Select'を拡張することは、' Zend_Db_Table_Select'も拡張して、あなたはそのクラスにあなたの変更を持たないので、ちょっとした作業になります。だからこそ、私はアクセサーを変更することを推奨します。 – jhuet

関連する問題