在我的系统中,我有3种类型的用户, 管理员 , 主管 和 < em>普通用户 。每种类型的用户都有一个 主管 ,他/她是另一个用户
假设我们有两个表users
和documents
,其关系如下:
此处documents
表格与users
列user_id
列相关
在我的系统中,我根据登录的用户类型有一个Documents
模块的CGridview。如果登录的用户类型为 管理 ,则会显示document
表的所有条目。
如果登录的用户类型为 主管 ,那么它将仅显示来自documents
表的那些条目,其中documents.user_id
等于users.user_id
{1}},users.sp_id = LoggedInUser
,如果我无法清楚表达,请对不起。
我可以使用Documents
模型中的关系在CGridview中显示数据。
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()),
数据提供者,我的高级搜索选项不会根据搜索参数过滤网格视图,而是返回相同的数据。