расширяющий Zend DB выбрать - PullRequest
       27

расширяющий Zend DB выбрать

0 голосов
/ 17 сентября 2011

Я создаю сайт типа CMS, там будет много администраторов. ACL был на месте для бизнес-уровня. Но теперь мы хотим применить собственную логику ACL к моделям, основанным на городе, к которому принадлежит пользователь-администратор.

Например: Администратор из Нью-Йорка. Он может просматривать контент, связанный с Нью-Йорком.

У меня есть много запросов, построенных с Zend_Db_Select в моделях. Теперь я должен изменить запросы везде. Есть ли способ, я могу добавить логику -> где ('u.city_id =?', $ Admin_user_city_id) для каждого запроса.

Заранее спасибо.

Спасибо Venu

1 Ответ

2 голосов
/ 18 сентября 2011

Я думаю, что вам не нужно расширять Zend_Db_Table_Select. Вы можете сделать то, что вы ищете, только расширив Zend_Db_Table_Abstract на My_Db_Table_Abstract, который будет распространяться и на все ваши модели. В этом абстрактном классе вы расширите значение по умолчанию select(), которое возвращает Zend_Db_Table_Select, и, прежде чем возвращать его, вы просто добавите к нему предложение where.

Таким образом, каждый раз, когда вы будете вызывать 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 где-то в зависимости от используемой модели.

...