我是Yii Framework的初学者,我遇到了一个无法修复的问题。我在班级管理员中有这个:
public function actionIndex()
{
$dataProvider=new CActiveDataProvider('Absence');
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
这给了我一份所有'缺席'的清单。
在我的情况下,'erty'已登录并查看每个缺席的列表。但是,由于他的角色存储在我的用户表中,我希望他只能看到他的'Collaborateur别名'的缺席列表。 有人可以帮我吗?
答案 0 :(得分:0)
创建
$criteria=new CDbCriteria;
$criteria->compare('role', $user->role /* replace this with required role*/, true);
并将其附加到DataProvider
$dataProvider = new CActiveDataProvider('Absence', array( 'criteria'=>$criteria));
答案 1 :(得分:0)
更好的是,因为它是一个商业规则,它应该进入缺勤数据模型。
因此,您可以在Absence数据模型中添加范围:
'mine'=>array(
'order'=>'a_sort_column DESC',
'condition'=>'role=:role',
'params'=>array(
'owner'=>Yii::app()->user->getState('roles'),
),
),
然后在你的代码中使用
$dataProvider=new CActiveDataProvider(Absence::model()->mine())
如果相关,如果始终应用此过滤器,则始终可以使用默认范围。
如果除管理员上下文外总是应用此过滤器,请考虑使用另一个扩展Absence模型的类并应用默认范围,如
class myAbsence extends Absence
{
public function defaultScope() {
return array(
'order'=>'a_sort_column DESC',
'condition'=>'role=:role',
'params'=>array(
'owner'=>Yii::app()->user->getState('roles'),
),
);
}
然后在非管理控制器中使用
$dataProvider=new CActiveDataProvider('myAbsence')