В моей системе у меня есть 3 типа пользователей, Администратор, Руководитель а также Обычный пользователь. Каждый тип пользователя имеет Руководитель кто сам другой пользователь.
Предположим, у нас есть две таблицы, users
а также documents
и отношение следующее:
Здесь documents
таблица связана с users
таблица по user_id
колонка.
В моей системе у меня есть CGridview Documents
модуль на основе зарегистрированного типа пользователя. Если вошедший в систему тип пользователя Администратор, тогда он показывает все записи document
Таблица.
Если вошедший в систему тип пользователя Руководитель, тогда он покажет только те записи из documents
стол, где documents.user_id
равен тем users.user_id
, чья users.sp_id = LoggedInUser
извините, если я не могу выразить это ясно.
Я могу показать данные в CGridview, используя отношение в Documents
модель.
public function relations(){
'users' => array(self::BELONGS_TO, 'Users', 'user_id'),
}
и в Document
Модель Я объявляю две пользовательские функции для возврата желаемого DataProvider. Это:
public function searchByUser($id)
{
$criteria=new CDbCriteria;
$criteria->condition = "user_id=$id";
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'defaultOrder'=>'doc_id DESC',
),
));
}
а также
public function searchBySupervisor($supervisor_id)
{
$criteria=new CDbCriteria;
$criteria->with=array('users');
$criteria->compare('user_id',$this->user_id,true);
$criteria->condition = "sp_id=$supervisor_id AND status='active'";
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'defaultOrder'=>'doc_idDESC',
),
));
}
В моем /documents/admin
вид, я использую DataProvider на основе зарегистрированного пользователя в CGridview:
if ($UserType=="Normal_User"){
$this->widget(
'booster.widgets.TbGridView', array(
'type' => 'striped bordered condensed',
'dataProvider'=>$model->searchByUser(Yii::app()->user->getId()),
elseif($UserType == "supervisor"){
$this->widget(
'booster.widgets.TbGridView', array(
'type' => 'striped bordered condensed',
'dataProvider'=>$model->searchBySupervisor(Yii::app()->user->getId()),
Все работает нормально, кроме моей функции поиска не работает. Если я вошел в систему как супервизор, значит, если я использую это: 'dataProvider'=>$model->searchBySupervisor(Yii::app()->user->getId()),
dataprovider, моя опция расширенного поиска не фильтрует вид сетки на основе параметра поиска, он возвращает те же данные.
Задача ещё не решена.
Других решений пока нет …