2

在我的系统中,我有 3 种类型的用户,AdminSupervisorNormal user。每种类型的用户都有一个主管,主管本身就是另一个用户。
假设我们有两个表,users并且documents关系如下:在此处输入图像描述

这里的documents表格是usersuser_id列与表格相关的。
在我的系统中,我有一个Documents基于登录用户类型的 CGridview 模块。如果登录的用户类型是Admin,那么它会显示表的所有条目document

如果登录的用户类型是Supervisor,那么它将只显示documents表中的那些条目,其中documents.user_id等于 those users.user_id, who 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看来,我 在 CGridview 中使用基于登录用户的 dataProvider

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,我的高级搜索选项不会根据搜索参数过滤 gridview,它返回相同的数据。

4

0 回答 0