Yii框架:根据用户角色的不同视图(在actionIndex上)

时间:2013-12-11 11:00:32

标签: php yii

我是Yii Framework的初学者,我遇到了一个无法修复的问题。我在班级管理员中有这个:

public function actionIndex()
{
  $dataProvider=new CActiveDataProvider('Absence');
  $this->render('index',array(
    'dataProvider'=>$dataProvider,
  ));
}

这给了我一份所有'缺席'的清单。

在我的情况下,'erty'已登录并查看每个缺席的列表。但是,由于他的角色存储在我的用户表中,我希望他只能看到他的'Collaborateur别名'的缺席列表。 有人可以帮我吗?

2 个答案:

答案 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')